每日算法— 二分查找

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))  



【每日算法】— 二分查找