你每次都检查中间的元素。
mid = (low high) / 2 ←---如果(low high)不是偶数,Python自动将mid向下取整。 guess = list[mid]
如果猜的数字小了,就相应地修改low。
if guess < item: low = mid 1
如果猜的数字大了,就修改high。完整的代码如下。
def binary_search(list, item): low = 0 (以下2行)low和high用于跟踪要在其中查找的列表部分 high = len(list)—1 while low <= high: ←-------------只要范围没有缩小到只包含一个元素, mid = (low high) / 2 ←-------------就检查中间的元素 guess = 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) # => 1 ←--------------------别忘了索引从0开始,第二个位置的索引为1 print binary_search(my_list, -1) # => None ←--------------------在Python中,None表示空,它意味着没有找到指定的元素
本文节选自《算法图解》
《算法图解》
作者:Aditya Bhargava
本书完成了一项不可能完成的任务:让数学变得有趣而易懂!
你渴望像看喜欢的小说一样学习算法吗?如果是,本书正是你梦寐以求的!
本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。书中的前三章将帮助你打下基础,余下篇幅主要介绍应用广泛的算法,具体内容包括:何时采用贪婪算法或动态规划;散列表的应用;图算法;K最近邻算法等。