算法--二分查找

  二分查找是基于有序序列的查找算法,该算法一开始令[left,right]为整个序列的下标区间,每次测试当前[left,right]的中间位置mid=(left+right)/2,判断A[mid]与欲查询的元素x的大小。

如果按照严格递增序列:

  1. 如果A[mid] == x,说明查找成功,退出查询;
  2. 如果A[mid] > x,说明查询序列在mid左侧,则从左子区间[left,mid]查找;
  3. 如果A[mid] < x,说明查找序列在mid右侧,则从右子区间[mid+1,right]查找;
int binarySearch(int A[],int left,int right,int x){
    int mid;
    while(left<=right){
        mid = (left+right)/2;
        if(A[mid]==x) return mid;
        else if(A[mid]>x)
            right = mid-1;
        else
            left = mid+1;
    }
    return -1; //查找失败,返回-1
    
}

 更近一步问题:如果递增序列A中元素可能重复,那么如何对给定的欲查询元素x:

    解:求出序列中第一个大于等于x的元素的位置L以及第一个大于x的元素的位置R,这样元素x在序列中的存在区间就是右闭左开区间[L,R)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值