二分查找

来源:互联网 发布:苹果5s怎么改4g网络 编辑:程序博客网 时间:2024/05/29 06:34
/*    形如:for(int i=0;i<n;i++)            if(f(i) >= c)        //其中,f 为 i 的函数,c 为与 f 无关的量,大小于符号可以任意.                break;    都可以写成二分的形式,将O(N)的复杂度降为O(logN).*/int Binary_Search(int *a,int l,int r,int x) //在递增序列中找到第一个不小于x的值.{    if(a[r] < x)        return r+1;    while(l < r)    {        int mid = (l+r)/2;        if(a[mid] < x)            l = mid+1;        else            r = mid;            //一直让a[r]>=x,最后剩下一个即为我们所要的解.    }    return r;}/*    Ps:如果条件改为“大于”,则将两个if中的 < 改为 <= 即可.    即二分写法中的if条件与暴力写法中的if条件正好相反.*/

原创粉丝点击