二分查找

PS:主要是看二分查找,二分查找有个前提,数组必须是排好序的,要么从小到大排序,要么从大到小排序;二分查找有两种方法,一个是递归, 一个是while循环,其实本质上都一样。有一个需要注意的点,在第二段代码中有标注

1、 二分查找递归版

///search函数查找目标元素x;
int search(int l, int r, int x)///l左端界限, r右端界限;
{
    if(l>r)return 0;
    int i = l + (r - l) / 2;
    if(a[i]==x)return 1;
    else if(a[i]>x)return search(l, i - 1, x);
    else return search(i + 1, r, x);

}

 

2、  while版本




int search(int l, int r, int x)
{
    while(l <= r)
    {
        int i = l + (r - l) / 2;///这么写i仍然等于(r+l)/2, 只不过会避免一些不好的情况;
        if(a[i] == x)return 1;//正好找到
        if(a[i] < x) l = i + 1;//a【i】小,所以要往大的方向找,改变l的值;
        else r = i - 1;//a【i】大,所以要往小的方向找,改变r的值;
    }
    return 0;
}



​

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值