1. 程式人生 > >Python二分查詢詳解

Python二分查詢詳解

二分查詢詳解:

從有序列表的候選區data[0:n]開始,通過對待查詢的值與候選區中間值的比較,可以使候選區減少一半

二分查詢:

在一段數字內,找到中間值,判斷要找的值和中間值大小的比較。

如果中間值大一些,則在中間值的左側區域繼續按照上述方式查詢。

如果中間值小一些,則在中間值的右側區域繼續按照上述方式查 找。

直到找到我們希望的數字。

def Binary_Search(data,val):
    #low 和high代表下標 最小下標,最大下標
    low=0
    high=len(data)-1
    # 只有當low小於High的時候證明中間有數
    while low <=high:
        #取列表中間值的下標
        mid=(low+high)//2
        #用下標取出列表中間的值與要查詢的元素比較,如果相等就剛好找到,返回下標
        if data[mid]==val:
        	#返回他的下標
            return mid  
        #如果大於,就需要在前邊一半列表再次查詢,最小下標不變,最大下標則變成中間元素下標減一;就是取列表前半部分割槽間
        elif data[mid]>val:
            high=mid-1
        #如果小於,就需要在後邊一半列表再次查詢,最大下標不變,最小下標則變成中間元素下標加一;就是取列表後半部分割槽間
        else:
            low=mid+1
    return '元素不存在'
data = ['a','b','m','c','d','e','k','f']
#用二分查詢需要先將列表以升序排序
ls=sorted(data)
print(ls)
print(Binary_Search(ls, 'm'))