查找——二分查找
来源:互联网 发布:php获取访问者域名 编辑:程序博客网 时间:2024/06/05 03:47
基本思想
二分查找是建立在有序顺序表基础上的!步骤如下:
1. 将表中间位置记录的关键字与给定K值进行比较,若两者相等,则查找成功。
2. 若两者不相等,利用中间位置将表分成前后两个子表,如果中间位置记录的关键字大于给定K值则进一步查找前一子表,否则查找后一子表。
3. 重复以上两个步骤,直到找到满足条件的记录则查找成功,或者分解出的子表不存在,此时查找失败。
实例分析
用二分查找法在有序表(6,12,15,18,22,25,28,35,46,58,60)查找12.
在查找中分别用low、high和mid记录表中的第一个、最后一个以及中间记录的位置。其中mid=(low+high)/2,当high<low时,查找失败。
分析过程图如下:
代码实现
int BinSearch(List L,int key){ int low=0,mid=0,i=-1,high=L.length-1; while(low<=high) { mid=(low+high)/2; if(L.r[mid]==key)//找到目标元素 { i=mid; break; } else if(L.r[mid]<key)low=mid+1;//从后半段查找 else high=mid-1;//从前半段查找 } return i;//若返回-1代表查找失败}
性能分析
对于长度为n的有序表,只有一个元素仅需比较一次就可以得到查找结果,有两个元素需要比较两次,有4个元素需要比较3次,有8个元素需要比较四次……有2h-1个元素需要比较h次得到查找结果。
令:
n=1+2+4+8+……+2h-1=2h-1
则在长度为n的有序表中最大查找长度为h,准确的说,当2h-1-1<n≤2h-1时的最大查找长度为h,则
h=[log2(n+1)]
假设每个记录的查找概率相等,则二分查找成功的平均查找长度为
当n较大时,n+1/n近似为1,则有如下近似结果:
所以二分查找的平均查找长度数量级(算法时间复杂度)为O(log2n)
比较:
和上一篇:查找——简单顺序查找相比,明显二分查找的性能较好,但由于简单顺序查找比较简单,再加之二分查找需要在有序表前提上进行,故在平时编程中使用较多。因此,对于有序表,多用二分查找较好~
- 查找——二分查找
- bsearch—二分查找
- 数据结构—二分查找
- Javascript—二分查找
- 递归—二分查找
- 查找算法之——二分查找
- C查找算法——二分查找
- 算法——查找之二分查找
- 常见查找算法之—二分查找
- 二分查找——LintCode
- 二分查找——sqrtx
- java——二分查找
- stl——二分查找
- 模板——二分查找
- 分而治之——二分查找
- 笔记——二分查找
- PHP数据结构——二分查找与顺序查找
- 折半查找(二分查找)——简单说明
- app上的一个小小的“顶部标题栏”
- 鸟哥的私房菜——总结(三)
- Python与简单网络爬虫的编写
- ubuntu 11.10 nfs mount.nfs:access denied by server while mounting
- .Net Membership介绍
- 查找——二分查找
- c#截取取变量指定位上的的值-范例
- 个人总结
- Android QuickAction效果简单实现
- JSF+iReport 报表的展示(一)
- PT与PX区别
- Java模拟异步消息的发送与回调
- 海思开发板wince平台实现照相机功能
- java字符串常用函数。