二分查找法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找法相关的知识,希望对你有一定的参考价值。
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
算法要求
1,必须采用顺序存储结构
2,必须按关键字大小有序排列
算法复杂度
二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x.
时间复杂度无非就是while循环的次数!
总共有n个元素,
渐渐跟下去就是n,n/2,n/4,....n/2^k(接下来操作元素的剩余个数),其中k就是循环的次数
由于你n/2^k取整后>=1
即令n/2^k=1
可得k=log2n,(是以2为底,n的对数)
所以时间复杂度可以表示O(h)=O(log2n)
二分法查找程序代码:
‘‘‘二分查找也是折半查找方法‘‘‘ def bin_search(data_list,val): low=0 #最小数下标 high=len(data_list)-1 #最大数下标 while low<=high: mid=(low+high)//2 #中间数下标 if data_list[mid]==val: #如果中间数等于val,返回 return mid elif data_list[mid]>val: #如果Val在中间数左边,移动high下标 high=mid-1 #向左移动一位 else: #如果Val在中间数左边,移动low下标 low=mid+1 #向右移动一位 return ret=bin_search(list(range(1,10)),9) print(ret)
以上是关于二分查找法的主要内容,如果未能解决你的问题,请参考以下文章