美文网首页
二分查找(基于迭代)

二分查找(基于迭代)

作者: laochonger | 来源:发表于2018-03-09 09:34 被阅读0次

一般用迭代实现二分查找,左闭右开。

int bsearch(int *A, int x, int y, int v){
    int m;
    while(x < y){
        m = x + (y-x)/2;
        if(v == A[m]) return m;
        else if(A[m] < v) x = m + 1;
        else y = m;                  //左闭右开 [x,y) 
    }
    return -1;
}

int lower_bound(int *A, int x, int y, int v){
    int m;
    while(x < y){
        m = x + (y-x)/2;
        if(A[m]>=v) y = m; //若等于则向左边逼近找最小界; 
        else x = m+1;
    }
    return x;
}

分析以上,A[m] = v,至少找到一个v,而左边还有可能有,因此区间变成[x,m]
A[m] > v,所求位置不可能在后面,但有可能是m,因此区间变为[x,m]
A[m] < v, m和前面都不可行,因此区间变为[m+1, y]

int upper_bound(int *A, int x, int y, int v){
int m;
while(x < y){
m = x + (x+y)/2;
if(A[m] <= v) x = m + 1;//若等于则向右边逼近找最大界
else y = m;
}
return x;
}

相关文章

  • 二分查找(基于迭代)

    一般用迭代实现二分查找,左闭右开。 分析以上,A[m] = v,至少找到一个v,而左边还有可能有,因此区间变成[x...

  • 算法4 读书笔记

    1.二分查找的迭代实现 #pragma warning(disable:4996) #include /*二分查找...

  • c++ primer 阅读 day8

    3.4 迭代器介绍 使用迭代器运算二分查找 3.5 数组

  • SearchInRotatedAry

    其实这个问题,是基于二分查找(BinarySearch)来解决的。所以这里需要先理解一下二分查找。 1. 二分查找...

  • 二分法模板

    【推荐:】二分查找的迭代Iterative写法(2)重点掌握 [ left, right ) 半开半闭区间迭代写法...

  • 二分查找及其扩展

    在有序数组中,二分查找是效率较高的查找算法。二分查找一般有递归和迭代 对有序数组查找指定数字在数组中出现的次数//...

  • 算法-二分查找

    二分查找基于索引,所以必须是有序的

  • 查找算法

    1.顺序查找 2.二分查找 3.插值查找 基本思想:基于二分查找算法,将查(mid)找点的选择改进为自适应选择,可...

  • 算法笔记(5)| 二分

    1.二分查找 二分查找是基于有序序列的查找算法,该算法一开始令[left,right]为整个序列的下标区间,然后每...

  • 数据结构与算法--散列表

    数据结构与算法--散列表 之前学习了基于链表的顺序查找、基于有序数组的二分查找、二叉查找树、红黑树,这些算法在查找...

网友评论

      本文标题:二分查找(基于迭代)

      本文链接:https://www.haomeiwen.com/subject/emfpfftx.html