二分查找
前提:列表必須是有序的
示例說明:需求是查找item
在列表lists
中的位置,
我們可以先拿itme
去和列表lists
的中間數lists[mid]
去比較:
如果itme
等於lists[mid]
那證明找到了,結束函數
如果itme
大於lists[mid]
,則我們將小於lists[mid]
的值全部捨棄掉,
如果itme
小於lists[mid]
,則我們將大於lists[mid]
的值全部捨棄掉,
最後再拿itme
和剩下部分的中間值比較,以此類推
def binary_search(lists, item):
low = 0
high = len(lists) - 1
while low <= high:
mid = int((low + high)/2)
guess = lists[mid]
if guess == item:
return mid
if guess > item:
high = mid
else:
low = mid
return None
test_list = [i for i in range(100)]
使用二分查找的好處:
使用二分查找可以大量的減少我們程序執行的步數,對於包含n個元素的列表,用二分查
找最多需要log 2 n步,而簡單查找最多需要n步。
如果列表包含100個數字,簡單查找最多需要猜100次。如果列表包含1億個數字,那麼簡單查找最多則需要猜1億次.
二分查找則不同。如果列表包含100個元素,最多要猜7次;如果列表包含40億個數字,最多
需猜32次