zoukankan      html  css  js  c++  java
  • lower_bound和upper_bound函数

    lower_bound(ForwardIter first,ForwardIter last,const_TP & val)
    upper_bound(ForwardIter first,ForwardIter last,const_TP & val)

    upper_bound()和lower_bound()演示如图:

    1, lower_bound
    函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置
    举例如下:

    一个数组number序列为:4,10,11,30,69,70,96,100.设要插入数字3,9,111.
    pos为要插入的位置的下标
    则 pos = lower_bound( number, number + 8, 3) - number,pos =0.
    pos = lower_bound( number, number + 8, 9) - number, pos = 1,即number数组的下标为1的位置(即10所在的位置)。
    pos = lower_bound(number, number + 8, 111) - number, pos = 8, 即number数组的下标为8的位置(但下标上限为7,所以返回最后一个元素的下一个元素)。
    所以,要记住:函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置,且last的位置是越界的!!~
    返回查找元素的第一个可安插位置,也就是“元素值>=查找值”的第一个元素的位置

    stl库中代码实现:

    //这个算法中,first是最终要返回的位置
    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(array[middle] < key) {     
                first = middle + 1;          
                len = len-half-1;       //在右边子序列中查找
            }
            else
                len = half;            //在左边子序列(包含middle)中查找
        }
        return first;
    }

    2.upper_bound()函数

    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;
    }
  • 相关阅读:
    Spring笔记——装配Bean
    Spring笔记——Spring之旅
    浅读Vue-Router源码记录
    稍微整理ES2020(es11)新东西
    前端实现批量打包下载文件
    CSS常见的三栏灵活布局实现方法
    不吹不黑,学完这篇,PDF导出就没有问题了
    不吹不黑,学完这篇,Word导出就没问题了
    不吹不黑,学完这篇,excel导出就没问题了
    Sass预编译 减法及除法计算问题
  • 原文地址:https://www.cnblogs.com/bryce1010/p/9387423.html
Copyright © 2011-2022 走看看