算法学习之二分查找算法的python实现

时间:2021-10-01 15:04:57

  ——参考自《算法图解》

  我们假设需要查找的数组是有序的(从大到小或者从小到大),如果无序,可以在第四行后插入一句

 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次