• STL 二分查找 upper_bound和lower_bound用法


    STL中关于二分查找的函数有三个lower_bound 、upper_bound 、binary_search 。
    这三个函数都运用于有序区间(当然这也是运用二分查找的前提),下面记录一下这两个函数。

    ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于等于值val的位置。

    ForwardIter upper_bound(ForwardIter first, ForwardIter last, const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于值val的位置。

    lower_bound和upper_bound如下图所示:
    这里写图片描述

    1.lower_bound函数源代码:

    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函数源代码:

    int upper_bound(int *array,int size,int key)
    {
        int len=size-1;
        int half,middle;
        while(len>0)
        {
            half=lem>>1;
            middle=first+half;
            if(array[middle]>key)///中位数大于key,在包含last的左半边序列中查找。
                len=half;
            else
            {
                first=middle+1;///中位数小于等于key,在右半边序列中查找。
                len=len-half-1;
            }
        }
        retrurn first;
    }
  • 相关阅读:
    ES6之模块化
    ES6之展开运算符
    ES6之解构赋值
    ES6之对象的语法糖
    ES6之函数的语法糖
    ES6之模板字符串
    Exchanger详解
    DNS解析过程
    CyclicBarrier详解
    ConuntDownLatch详解
  • 原文地址:https://www.cnblogs.com/nanfenggu/p/7899991.html
Copyright © 2020-2023  润新知