二分查找时间复杂度分析

来源:互联网 发布:openjdk8源码下载 编辑:程序博客网 时间:2024/05/21 12:59
int[] a={1,2,3,3,4,6,7,8};        int key=1,low=0,high=a.length-1;        while (low<=high){            int middle=(low+high)/2;            if (key==a[middle]){                System.out.println(middle);                break;            }            else if (key>a[middle]){                low=middle+1;            }else if (key<a[middle]){                high=middle-1;            }        }

因为二分查找每次排除掉一半的不适合值,所以对于n个元素的情况:
一次二分剩下:n/2
两次二分剩下:n/2/2 = n/4
。。。
m次二分剩下:n/(2^m)
在最坏情况下是在排除到只剩下最后一个值之后得到结果,所以为
n/(2^m)=1;
2^m=n;
所以时间复杂度为:log2(n)
参考http://www.cnblogs.com/qiaozhoulin/p/5328090.html