1. 程式人生 > >python——二分查找算法

python——二分查找算法

pytho lba 希望 result def wrapper spa arc earch

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

python——二分查找算法