首页 > 其他 > 详细

二分搜索法

时间:2015-12-28 23:15:17      阅读:251      评论:0      收藏:0      [点我收藏+]

算法目的

在已排好序的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)

二分搜索法

原文:http://www.cnblogs.com/sillypasserby/p/5084133.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!