目录
7-顺序查找(列表查找)
1-什么是列表查找
代码:
8-二分查找介绍(Binary Search)
查找元素3详细思路:
9-二分查找代码
10-线性查找与二分查找比较
运行时间-装饰器
比较代码:
11-排序介绍
7-顺序查找(列表查找)
1-什么是列表查找
查找:在一些数据元素中,通过一定的方法找出与给定关键字相同的数据元素的过程。 列表查找(线性表查找):从列表中查找指定元素 输入:列表、待查找元素 输出:元素下标示(未找到元素时一般返回None或-1) 内置列表查找函数: index() --->顺序查找
顺序查找(linear search)
---按照顺序进行查找.
代码:
def linear_search(li,val): for index, value in enumerate(li): # print(index,value) if val == value: return index else: return None print(linear_search([1, 2, 3, 4, 5, 6, 7, 8, 9], 9))
8-二分查找介绍(Binary Search)
---必须要先排序,--->有序.
二分查找:又叫折半查找,从 有序列表 的初始候选区li[0:n]开始,通过对待查找的值与候选区中间值的比较,,可以使候选区减少一半。
查找元素3详细思路:
9-二分查找代码
def binary_search_recursive(li,val): left=0 right=len(li)-1 while left <= right: #候选区有值 mid = (left+right)//2 if li[mid] == val: return mid elif li[mid] > val: #带查找的值在mid左侧 right = mid-1 else: #li[mid]<val 带查找的值在mid右侧 left = mid+1 else: return None
10-线性查找与二分查找比较
运行时间-装饰器
--使用的时候注意导入.
import time def timeit(func): def wrapper(*args, **kwargs): t1 = time.time() result = func(*args, **kwargs) t2 = time.time() print("%s running time: %s secs." % (func.__name__,t2-t1)) return result return wrapper
比较代码:
import time from test_time import * @timeit def linear_search(li,val): for index, value in enumerate(li): # print(index,value) if val == value: return index else: return None @timeit def binary_search(li,val): left, right = 0, len(li)-1 while left <= right: mid = (left+right)//2 if val == li[mid]: return mid elif val < li[mid]: left = mid+1 else: right = mid-1 else: return None # li = list(range(1000000000)) # print(li) # linear_search(li,999998009) # binary_search(li,999998009)
---很显然二分查找的效率非常高,比顺序查找高多了.
二分查找的复杂度为: logn (因为过程在减半.)