从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半
二分查找:
在一段数字内,找到中间值,判断要找的值和中间值大小的比较。
如果中间值大一些,则在中间值的左侧区域继续按照上述方式查找。
如果中间值小一些,则在中间值的右侧区域继续按照上述方式查 找。
直到找到我们希望的数字。
import time
def cal_time(func): #装饰器def wrapper(*args, **kwargs): t1 = time.time() result = func(*args, **kwargs) t2 = time.time() print("running time:",func.__name__, t2 - t1) return result return wrapper @cal_time def bin_search(data_set,val): #low 和high代表下标 最小下标,最大下标 low=0 high=len(data_set)-1 while low <=high:# 只有当low小于High的时候证明中间有数 mid=(low+high)//2 if data_set[mid]==val: return mid #返回他的下标 elif data_set[mid]>val: high=mid-1 else: low=mid+1 return # return null证明没有找到 data_set = list(range(100000000)) print(bin_search(data_set, 999999))