每日算法— 二分查找
Posted 人类之奴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日算法— 二分查找相关的知识,希望对你有一定的参考价值。
"本文将讲解程序员的入门算法之一:二分查找"
这些场景的实现都是背后的搜索算法在支撑着;所以搜索算法是最基本的算法。(人们往往会低估最基本的算法,但事实是最基本的算法才是最重要的算法;不要只顾追求高大上的算法,而忽略这些高大上算法的底层算法支撑,这是本末倒置的愚蠢做法)
二分查找算法的输入是一个有序的元素列表,如果要查找的元素包含在列表中,返回该元素在列表中的位置,否则返回null。
与二分查找相对的是简单查找,简单查找是依次对照列表元素与我们要查找的元素是否匹配,通过这种方法来查找我们的目标元素。
简单查找与二分查找
从上图的算法图解,我们可以看出简单查找的时间复杂度是明显大于二分查找;简单查找的时间复杂度为O(n),二分查找的时间复杂度为O(log2n)。而且随着元素数量的增加,二分查找需要的额外时间并不多,而简单查找需要的额外时间却很多。
算法实现:
二分查找是每次将要查找的元素与有序列表中间元素比较,若相等,则输出该元素坐标;若目标元素大于中间元素,则排除了小于中间元素的一半的元素;若目标元素小于中间元素,则排除了大于中间元素的一半的元素;重复上述操作,直至确定了查找结果。
def binary_search(list,item):
low=0
high=len(list)-1
while low<=high:
mid=int((low+high)/2)
guess=list[mid]
if guess==item:
return mid
if guess>item:
high=mid-1
else:
low=mid-1
return None
list=[1,2,4,5,6,7,8,9,12]
print(binary_search(list,7))
print(binary_search(list,10))
以上是关于每日算法— 二分查找的主要内容,如果未能解决你的问题,请参考以下文章