Python查詢-二分查詢
二分查詢
折半查詢法也稱為二分查詢法,它充分利用了元素間的次序關係,採用分治策略,可在最壞的情況下用O(log n)完成搜尋任務。
它的基本思想是,將n個元素分成個數大致相同的兩半,取a[n/2]與欲查詢的x作比較,如果x=a[n/2]則找到x,演算法終止。如 果x<a[n/2],則我們只要在陣列a的左半部繼續搜尋x(這裡假設陣列元素呈升序排列)。如果x>a[n/2],則我們只要在陣列a的右 半部繼續搜尋x。
二分查詢非遞迴方式
def binarySearch(sourceList,key):
high = len(sourceList)
low = 1
while low <= high:
mid = int((low + high)/2)
if key < sourceList[mid]:
high = mid - 1
elif key > sourceList[mid]:
low = mid + 1
else:
return mid
return 0
if __name__ == "__main__":
sourceList = [0,2,5,7,10,12,13,14,17,18]
index = binarySearch(sourceList,14)
print(index)
程式輸出結果
7
二分查詢遞迴方式
def binarySearch_1(sourceList,key,low,high):
if low <= high:
mid = int((low + high) / 2)
print(mid)
if sourceList[mid] < key:
low = mid + 1
return binarySearch_1(sourceList,key,low,high)
if sourceList[mid] > key:
high = mid + 1
return binarySearch_1(sourceList,key,low,high)
elif sourceList[mid] == key:
return mid
return 0
if __name__ == "__main__":
sourceList = [0,2,5,7,10,12,13,14,17,18]
index = binarySearch_1(sourceList,14,1,len(sourceList))
print(index)
程式輸出結果
7