——参考自《算法图解》
我们假设需要查找的数组是有序的(从大到小或者从小到大),如果无序,可以在第四行后插入一句
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次