关于折半查找的思考

来源:互联网 发布:vmware安装mac 编辑:程序博客网 时间:2024/05/22 05:50

折半查找对于编程人员来说再熟悉不过了~

 

我们常见的形式大多如下:(假定v数组中的数字按升序排列)

int binsearch(int x,int v[],int n){    int low,high,mid;    low=0;    high=n-1;        while(low<=high)    {         mid=(low+high)/2;         if(x<v[mid])             high=mid-1;         else if(x>v[mid])             low=mid+1;         else             return mid;     }     return -1;}


这里在while循环中共执行了两次测试,这样效率会很低,不过容易理解,比较直观。那有没有一种方法,在while循环中只让它测试一次呢?答案是肯定的。

 

int bin2search(int x,int v[],int n){    int low,high,mid;    low=0;    high=n-1;    while(low<high)    {        mid=(low+high)/2;        if(x<=v[mid])           high=mid;        else            low=mid+1;    }    return (x==v[low]?low:-1)}


额,上面最后一句少了个分号~,懒得重新写了,csdn的嵌入代码真是不好用~

 

 

原创粉丝点击