感想:最近读了一本书,书名是《算法图解》个人觉得这本书挺好,里面讲了很多实用且易懂的算法,以后我会陆续的把自己的笔记搬到这上面,有兴趣的可以看一下。
二分查找:
二分查找是一种算法,其输入是一个有序的元素列表。如果要查找的元素包含在列表中,二分查找返回其位置;否则返回NULL。
下面的例子说明了二分查找的工作原理。随便想一个1~100的数字。你的目的是以最少的次数猜到这个数字。你每次猜测后,我会说小了、大了或对了。下面是一个更佳的猜法。
- 从50开始,小了,但排除了一半的数字!至此,你知道1~50都小了。
- 接下来,你猜75,大了,那余下的数字又排除了一半!使用二分查找时,你猜测的是中间的数字,从而每次都将排除余下的一半的数字。
- 接下来,你猜测63(50和75中间的数字),大了,那余下的一半的数字又被排除了。
- 最后你再猜测57,(50~63中间的数字),对了!
这就是二分查找,你学会了吗?
注:仅当列表是有序的时候,二分查找才管用。
Python代码实现:
# coding=utf-8
import math
def binary_search(list,item): # low和high用于跟踪要在其中查找的列表的部分
low = 0
high = len(list)-1
while low <= high: # 只要范围没有缩小到只包含一个元素就检查中间的元素
mid = math.ceil((low + high)/2)
guess = list[mid]
# print(guess)
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(len(my_list))
print(binary_search(my_list,3))
结果:1
《算法图解》之二分查找

449

被折叠的 条评论
为什么被折叠?



