二分法搜索有序整数

牛顿二分法是数值计算当中一个非常重要的工具,本文所论述的是在整数集上进行搜索。使用前,需要说明一点,在利用二分法时搜索时,所给定的数据集一定是已经从小到大有序排列的,否则无法用该方法。
基本思路如下:让需要搜索的数(n)与左(left)、右(right)边界的中值比较。本文中,中值用mid表示,数学关系:mid = (left + right)/2。
如果 n 大于 mid,则 n 位于中值和右边界之间,更新左边界left = mid+1
如果 n 小于 mid,则 n 位于左边界和 中值之间,更新右边界 right = mid-1
如果 等于 mid,就找到了。
如果 n 不在给定整数集合里,就要结束循环。
因此,循环的条件是 left <= right。这也是,为什么要用left = mid+1或者 right = mid-1这样的语句来更新边界, 如果是left = mid或 left = right 则无法退出循环。
伪代码如下:

int BinaFind(int n,int left,int right)  //整数集找,调用时给出左右边界
{
    int mid;
    while(left <= right)  //控制条件
    {
        mid = (left + right)/2;  //每次更新中值
        if(n > mid)             //在中值右边
            left = mid + 1;
        else if (n < mid)       //在中值左边
            right = mid - 1;
        else                    //找到了
            return mid;
    }
    return NULL;       //已经是left > right,没找到
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值