博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二分查找
阅读量:5839 次
发布时间:2019-06-18

本文共 942 字,大约阅读时间需要 3 分钟。

二分查找有着查找速度快平均性能好等优点,但必须要求待查表为有序表,且插入删除困难

看看JDK二分查找源码中的实现

private static int binarySearch0(int[] a, int fromIndex, int toIndex,int key) {        int low = fromIndex;        int high = toIndex - 1;                /* 如果改为 low < high,就有可能出现本来数组中有待查元素,却查不到的情况          比如查10,前两次查找和查12一样,最后low和high指向了元素10,          但是此时while(low
>> 1;//使用位操作,效率高 int midVal = a[mid]; if (midVal < key) low = mid + 1; else if (midVal > key) high = mid - 1; else return mid; // 找到目标 } return -(low + 1); // 没找到目标. }

复杂度分析

你要查找的数据规模如果是n,那二分一次后规模就变为n/21,二分两次后规模为n/22,...,二分m次后规模为n/2^m,若二分m次后跳出循环,则m就是循环的次数(不管查找是否成功)

最坏情况(即查不到)

假设二分m次后剩下一个元素,那么此时规模为1,同时二分m次后规模变为n/2m,则:n/2m = 1, 解出 m = lg(n),此时再循环一次,查找不到,跳出循环,所以说最多有 m+1 次循环(二分m次未跳出循环,还要二分一次),也就是查找一个元素最多需要m+1次,即lg(n)+1次比较,故二分的最坏时间复杂度为O(n) = lg(n)

折半后,要对一半元素进行遍历,复杂度是O(n),所以算法的时间复杂度为O(n * lg(n))

转载地址:http://gyncx.baihongyu.com/

你可能感兴趣的文章
Redhat 7安装samba服务后只能读取目录,无法写入的处理办法
查看>>
Linux里的特殊权限之a和i
查看>>
Windows上使用Open***客户端
查看>>
制冷要随需应变
查看>>
应用:Lync界面
查看>>
我的友情链接
查看>>
Linux系统修改系统时间说明
查看>>
php安全配置
查看>>
DB2 UDB 9.1 For AIX 安装指南
查看>>
Exchange Server 2016与Exchange 2013共存
查看>>
某源码thread,socket研究2
查看>>
分拆VS整合,哪一个入口才能神庙逃生
查看>>
Mysql的一些操作
查看>>
第四次个人作业 -----alpha测试
查看>>
java不同安装包的安装方法(rpm,bin,tar)
查看>>
php页面编码设置详解
查看>>
if __name__=="__main__"
查看>>
存储基本知识
查看>>
[2602]Bone Collector (HDU)
查看>>
NodeJS框架Express的模板视图机制
查看>>