二分查找时间复杂度分析

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 (key1;
            }
        }

因为二分查找每次排除掉一半的不适合值,所以对于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

你可能感兴趣的:(Java,算法)