從有序列表的候選區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))