二分搜索法

算法目的

在已排好序的n个元素a[0:n-1]中,找出特定元素x在数组中的位置

编码软件

Dev-C++ 5.11

算法思想

将n个元素分成两半,取a[n/2]与x比较,

若x==a[n/2],则返回n/2。

若x < a[n/2],则在a[]的左半部份继续搜索。

若x > a[n/2],则在a[]的右半部份继续搜索。

 

Algorithms binarySearch(input[],x,length)

    left=0,right=length-1;

    while(left<=right)

        middle = (left+right)/2

        if x==input[middle] return middle

        else if x>input[middle] left = middle+1

        else right = middle-1

 

 

int binarySearch(int input[],int x,int length){
    
    int left=0,right=length-1;
    int middle;
    while(left<=right){    //确保有一个元素落在搜索范围 
        middle=(left+right)/2;
        if(x == input[middle]){
            
            return middle;    //返回该数字在数组中的序列号 
            
        }            
        else{
            
            if(x > input[middle]){
                left = middle+1;    //x比input[left...middle]中的元素都要大 
            }
            else{
                right = middle-1;    //x比input[middle...right] 中的元素都要小 
            }
        }
            
    }
    return -1;    //数组中不存在该值     
}

 

时间复杂性

每执行一次while()循环,待搜索的数组大小减小一半,最坏情况下,while循环被执行了logn次,所以算法在最坏情况下时间复杂性为O(logn)

posted on 2015-12-28 21:51  sillypasserby  阅读(247)  评论(0)    收藏  举报

导航