浅谈STL中的二分lower_bound()与upper_bound()

来源:互联网 发布:gekka睡眠面膜 知乎 编辑:程序博客网 时间:2024/06/12 19:09

lower_bound()

用途

这个函数是从已排好序的数列a中利用二分搜索找出指向满足ai >= k的ai的最小指针

STL中的代码实现

int lower_bound(int *array, int size, int key){    int first = 0, middle;    int half, len;    len = size;    while(len > 0) {        half = len >> 1;        middle = first + half;        if(arrar[middle] < key) {            first = middle+1;            len = len - half-1;        }        else             len = half;         //在左边子序列(包含middle)中查找    }    return first;}

lower_bound()

用途

这个函数是从已排好序的数列a中利用二分搜索找出指向满足ai >= k的ai的最大指针

STL中的代码实现

int upper_bound(int *array, int size, int key){    int first = 0, len = size-1;    int half, middle;    while(len > 0){        half = len >> 1;        middle = first + half;        if(array[middle] > key)     //中位数大于key,在包含last的左半边序列中查找。            len = half;        else{            first = middle + 1;    //中位数小于等于key,在右半边序列中查找。            len = len - half - 1;        }    }    return first;}
阅读全文
0 0