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

  ——参考自《算法图解》

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

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次

posted @ 2018-12-06 18:39  施浩宇  阅读(382)  评论(0编辑  收藏  举报