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

view sourceprint?
01.//这个算法中,first是最终要返回的位置
02.int lower_bound(int *array, int size, int key)
03.{
04.int first = 0, middle;
05.int half, len;
06.len = size;
07. 
08.while(len > 0) {
09.half = len >> 1;
10.middle = first + half;
11.if(array[middle] < key) {    
12.first = middle + 1;         
13.len = len-half-1;       //在右边子序列中查找
14.}
15.else
16.len = half;            //在左边子序列(包含middle)中查找
17.}
18.return first;
19.}

2.upper_bound函数源代码:

view sourceprint?
01.int upper_bound(int *array, int size, int key)
02.{
03.int len = size-1;
04.int half, middle;
05. 
06.while(len > 0){
07.half = len >> 1;
08.middle = first + half;
09.if(array[middle] > key)     //中位数大于key,在包含last的左半边序列中查找。
10.len = half;
11.else{
12.first = middle + 1;    //中位数小于等于key,在右半边序列中查找。
13.len = len - half - 1;
14.}
15.}
16.return first;
17.}

 

转载于:https://www.cnblogs.com/liudehao/p/4133921.html

C++中lower_bound函数和upper_bound函数相关推荐

  1. C语言bound函数,C++中lower_bound函数和upper_bound函数

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

  2. lower_bound()函数和upper_bound函数

    头文件:algorithm int pos1=lower_bounda,a+n,k)-a;返回数组中第一个大于或等于k的值的下标 int pos2=upper_bound(a,a+n,k)-a;返回数 ...

  3. upperbound找不到_lower_bound()函数和upper_bound()函数,以及二分查找

    lower_bound(): 默认版本 template ForwardIterator lower_bound (ForwardIterator first, ForwardIterator las ...

  4. C++ lower_bound 与 upper_bound 函数

    头文件: #include  <algorithm> 二分查找的函数有 3 个: 参考:C++ lower_bound 和upper_bound lower_bound(起始地址,结束地址 ...

  5. lower_bound()/upper_bound()函数(C++)

    文章目录 1.lower_bound()/upper_bound()函数简单介绍 2.lower_bound()/upper_bound()函数分析 3.lower_bound()/upper_bou ...

  6. 二分查找、求上界和下界(包括内置函数lower_bound、和upper_bound的使用)

    二分查找: //二分查找(迭代实现) int bsearch(int* array, int low, int high, int index) {int mid;while (low < hi ...

  7. C++ lower_bound() upper_bound() 函数用法详解(深入了解,一文学会)

    find().find_if().search() 等.值得一提的是,这些函数的底层实现都采用的是顺序查找(逐个遍历)的方式,在某些场景中的执行效率并不高.例如,当指定区域内的数据处于有序状态时,如果 ...

  8. lower_bound()和upper_bound( )函数详解

    lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的.两个函数的用法类似,在一个左闭右开的有序区间里进行二分查找,需要查找的值由第三个参数给出 ...

  9. oracle中的循环函数,Oracle日期函数和循环总结

    一,日期相关的函数 Select to_char(sysdate,'Q') from dual;--指定日期的季度 Select to_char(sysdate,'MM') from dual;--月 ...

最新文章

  1. python矩阵运算库效率_python - 布尔矩阵运算的最快方法_performance_酷徒编程知识库...
  2. 使用json-lib实现json to javabean
  3. MySQL自动化平台那些事-分秒必争
  4. python爬虫---从零开始(一)初识爬虫
  5. php facade模,PHP 设计模式之外观模式 Facade
  6. wxWidgets:C++ 异常
  7. python中怎么比较两个列表的大小_在Python中比较两个大小不同的列表
  8. DBUtils事务处理
  9. 13.4 MySQL用户管理;13.5 常用sql语句;13.6 MySQL数据库备份恢复
  10. SAP HANA Express 版本的注册和安装
  11. python读写文件实例_python读写文件的简单示例
  12. 架构设计器_大厂案例:马蜂窝大交通业务监控报警系统架构设计与实现
  13. php5.5升级到php5.6,从php5.5.9升级到php5.6之后,相当于php5enmod?
  14. 实现多国语言的几个小知识
  15. axure html尺寸,Axure 原型 | 教你使用自适应视图构建界面
  16. linux查看挂载内存卡,Ubuntu Linux 挂载移动硬盘、U盘、SD卡(对于新手)
  17. 软考初级程序员怎么备战好一点,有什么好的复习方法推荐吗?
  18. 前额单通道脑电睡眠分期算法设计
  19. 公路养护工证含金量高吗?在哪报考?
  20. 单循环赛制php,年度总决赛个人PK循环赛赛制解读

热门文章

  1. 越混越差的十个原因,看看你有没有?
  2. 创业人永远不要让工作成为自己的负担
  3. 马云还曾有过这么一段求职经历
  4. 使用web3和infura开发以太坊ethereum区块链
  5. 算法--最大连续子序列和(动态规划,分而治之)
  6. sql server 架构_在SQL Server中引入架构文档
  7. 查看可执行文件的运行架构_在运行查询之前如何查看结果集的架构
  8. ssas 分层维度_通过SSAS维度层次结构增强数据分析
  9. webstorm的debug模式
  10. 【7005】二叉树的遍历问题2