演算法學習之二分查詢演算法的python實現
阿新 • • 發佈:2018-12-06
——參考自《演算法圖解》
我們假設需要查詢的陣列是有序的(從大到小或者從小到大),如果無序,可以在第四行後插入一句
1 my_list.sort()
完整程式碼如下
1 def binary_search(my_list, item): 2 # low和high用於跟蹤要在其中查詢到的列表的部分 3 low = 0 4 high = len(my_list)-1 5 while low <= high: 6 mid = (low+high)//2 # 地板除,保證mid為整數 7 guess = my_list[mid]8 if guess == item: 9 return mid 10 if guess > item: 11 high = mid - 1 12 else: 13 low = mid + 1 14 return None 15 16 17 # 測試一下 18 my_list = [1, 3, 5, 7, 9] 19 print(binary_search(my_list, 3)) # 1 20 print(binary_search(my_list, -1)) #None
Q1:假設一個包含有128個名字的有序列表,使用二分查詢一個名字,那麼最多需要查詢幾次呢?
A1:log2n n=128,需要7次