二分查找——递归与非递归

来源:互联网 发布:电脑设计软件 编辑:程序博客网 时间:2024/05/24 02:13

最近做了一道题目,在弄清原理之后发现怎么也过不去,找了几个小时的bug,结果问题就出现在二分查找的知识点上,暑假是有接触过二分的题目,应该是没有完全理解才会在昨天的那道题上碰钉子,借此写一下对二分的理解来巩固巩固以前的知识。

一谈起查找,最先想到的无非是遍历整组数据,复杂度为O(n),但是对于一组有规律的数据,比如按大小顺序排列的一组,这时再进行查找时就可以边比较边查找.首先从中间断开,比较中间的数值与待查找的x大小关系,若大于x,则x一定在整组数据的左边,反之,在右边,这样,每次查找只需查找数据的一半长度即可,直到找到为之返回元素所在的位置,那么总的复杂度就是O(log2n)。

递归:注意数组a是有序排列的

int A(int L,int R,int x)
{
    int M=(L+R)/2;
    if(a[M]==x)
        return M;
    else if(a[M]<x)//需要从右边查找
        return A(M+1,R,x);
    else
       return A(L,M-1,x);//从左边查找
}

非递归:

int A(int L,int R,int x)
{
    while(L<R)
    {
        int M=(L+R)/2;
        if(a[M]==x)
            return M;
        else if(a[M]<x)
            L=M+1;//查找右边
        else
            R=M-1;//查找左边
    }
    return -1;
}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 高铁车票没赶上怎么办 机票错点了退票怎么办 快递号码留错了怎么办 物流号码留错了怎么办 12306身份信息被注册怎么办 12306注册身份信息重复怎么办 12306账号被注册了怎么办 高铁账号忘记了怎么办 铁路12306网站密码错误怎么办 网上买火车票密码忘了怎么办 快递没收到点了确认收货怎么办 快递没收到自动确认收货怎么办 房地产股市汇率一齐暴跌怎么办 尼日利亚落地签过期了怎么办 期货亏光了所有怎么办 期货钱亏完了该怎么办 做黄金亏损500万怎么办 炒黄金被骗35万怎么办 淘宝发货填错单号怎么办 发货单号填错了怎么办 发快递忘了单号怎么办 国际物流查不到物流怎么办 纸币上印邪教该怎么办 钥匙掉到电梯缝里怎么办 汽车电子钥匙铜线折一根怎么办 防盗门的锁不好开怎么办 同学帮刷饭卡说不用还钱了怎么办 em231电源指示灯不亮怎么办 运行广联达卡住怎么办 马桶被粪便(大便)堵了怎么办 子宫壁厚12mm怎么办 管子太多每次洗澡都是冷水怎么办 热水冷水装反了怎么办 大树被高锰酸钾灌溉了怎么办会死吗 防盗门门被锁了怎么办 门被里面反锁了怎么办 门里面被锁了怎么办 被锁在门里怎么办 门锁住了没钥匙怎么办 车被别人锁住了怎么办 汽车轱辘被锁了怎么办