——参考自《算法图解》
我们假设需要查找的数组是有序的(从大到小或者从小到大),如果无序,可以在第四行后插入一句
my_list.sort()
完整代码如下
def binary_search(my_list, item):
# low和high用于跟踪要在其中查找到的列表的部分
low = 0
high = len(my_list)-1
while low <= high:
mid = (low+high)//2 # 地板除,保证mid为整数
guess = my_list[mid]
if guess == item:
return mid
if guess > item:
high = mid - 1
else:
low = mid + 1
return None # 测试一下
my_list = [1, 3, 5, 7, 9]
print(binary_search(my_list, 3)) #
print(binary_search(my_list, -1)) # None
Q1:假设一个包含有128个名字的有序列表,使用二分查找一个名字,那么最多需要查找几次呢?
A1:log2n n=128,需要7次