二分查找:

//二分查找(迭代实现)
int bsearch(int* array, int low, int high, int index)
{int mid;while (low < high){mid = low + (high - low) / 2;//防止溢出if (array[mid] == index) return mid;//查找成功else if (array[mid] > index) high = mid;else low = mid + 1;}return -1;//查找失败
}

lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。

upper_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。

求下界lower_bound:

//求下界,既在单调递增序列array中查找>=index的数中最小的一个(即index或index的后继)
int lower_bound(int* array, int low, int high, int index)
{int mid;while (low < high){mid = low + (high - low) / 2;//防止溢出if (array[mid] >=index) high=mid;else low = mid + 1;}return low;
}

//或者直接使用内置函数lower_bound,方法如下:

#include <algorithm>
#include<vector>
#include <iostream>
using namespace std;
int main()
{//数组int a[] = { 1,2,3,4,5,6,7,8 };cout << lower_bound(a, a + 8, 2) - a<<endl;//此时输出下标1,如果没有>=index的,则返回8;
//向量vector<int> v;for(int i=1;i<=8;i++){v.push_back(i);//v={ 1,2,3,4,5,6,7,8 };}cout<<lower_bound(v.begin(), v.end(), 6) - v.begin();//此时输出下标5既为v[5],如果没有>=index的,则返回8;}

求上界upper_bound:

//求上界,求index出现的最后一个位置的后面的一个位置(这里没有等于);
//如果不存在,返回下标i:既在i处插入index元素后仍然有序。
int upper_bound(int* array, int low, int high, int index)
{int mid;while (low < high){mid = low + (high - low) / 2;//防止溢出if (array[mid] <= index) low = mid + 1;else high = mid;}return low;
}

//或者直接使用内置函数upper_bound,方法如下:

#include <algorithm>
#include<vector>
#include <iostream>
using namespace std;
int main()
{//数组int a[] = { 1,2,3,4,5,6,7,8 };cout << upper_bound(a, a + 7, 6) - a << endl;//返回下标6
//向量vector<int> v;for (int i = 1; i <= 8; i++){v.push_back(i);//v={ 1,2,3,4,5,6,7,8 };}cout << upper_bound(v.begin(), v.end(), 6) - v.begin();//此时输出下标6}

最后,如果有点混淆,看看下面这张图:

二分查找、求上界和下界(包括内置函数lower_bound、和upper_bound的使用)相关推荐

  1. 二分查找求上界和下界

    二分查找求上界和下界 假设序列有序,其区间为[left,right)[left, right),设middlemiddle为区间中间值,现在需要获得首个出现元素vv的位置,如果不存在,返回一个位置,在 ...

  2. Python中lambda详解(包括内置函数map、reduce、filter、sorted、max)

    文章目录 一.lambda是什么? 1.lambda语法 2.语法详解 二.lambda的使用 1.定义 2.调用 3.替换 4.作返回值 三.lambda作参数 1.map函数 2.reduce函数 ...

  3. 二分查找(上界,下界)

    // 普通二分查找 int bsearch(int *A, int l, int r, int val){ // [l, r)while(l < r){int mid = l + (r - l) ...

  4. Python 循环语句和字符串内置函数

    系列文章目录 第五章 Python 机器学习入门之循环语句与字符串内置函数 Python 机器学习入门之循环语句 系列文章目录 前言 一.while 二.while嵌套循环 三.掷骰子 四.break ...

  5. hive内置函数_flink教程flink modules详解之使用hive函数

    modules概念 通过hive module使用hive函数 内置函数 自定义函数 sql 客户端的使用 原理分析和源码解析 实现 modules概念 flink 提供了一个module的概念,使用 ...

  6. Python学习(14)--内置函数

    Python学习(14)--内置函数 1.Python内置函数 在Python中有很多的内置函数供我们调用,熟练的使用这些内置函数可以让编写代码时事半功倍,所谓内置函数就是那些Python已经预定义并 ...

  7. MATLAB 求函数极值的内置函数一览表(实则优化算法函数汇总)

    MATLAB 求函数极值的内置函数一览表 收集了几乎所有的 MATLAB 内置的优化函数,可收藏,需要时查阅. 文章目录 MATLAB 求函数极值的内置函数一览表 简介 概览 求函数极值(或最大值最小 ...

  8. python求最小值不能使用min和sotred_python基础——内置函数

    python基础--内置函数  一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highl ...

  9. python中求包含5的数_Python 内置函数 ( ) 可以返回列表、元组、字典、集合、字符串以及 range 对象中元素个数。_学小易找答案...

    [简答题]实例1:求两数相除的结果. 先后输入2个数据,计算第一个数除以第二个数的结果. 要求能够处理输入数据为非数字.除数为零.文件末尾EndOfFile 和用户使用Ctrl + C 命令终止程序等 ...

最新文章

  1. ie6 span 换行IE6中float:right换行问题的替代解决方案
  2. Echart---多项柱状图-2D/H5
  3. 初识Docker-Docker的安装
  4. Unable to create '/media/sf_nginx/H2_20151103/H2/.git/index.lock': File exists.
  5. iOS- 如何改变section header
  6. Vue的router导航重复-报错:Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to curren
  7. batch_size,iteration,epoch关系
  8. zz:测试还是开发?
  9. Linux RedHat 5.2 构建PostFix邮件服务器
  10. python车辆型号识别_基于Tensorflow的车辆检测和车型识别
  11. 如何开发一套完整的医疗远程会诊系统方案
  12. jsp综合开发实例——夏日九宫格日记网
  13. PostgreSQL 跨数据库实例之间的数据访问
  14. 安装语言包-英文(美国)
  15. 第08课:Retained 消息和 LWT
  16. abap开发那点事 (二)
  17. python 的基础 学习第十天函数的初始
  18. meshgrid()+plt.contourf()用法
  19. jsp+servlet实现个人博客系统
  20. Android一键锁屏实现

热门文章

  1. 索骥馆-网络营销之《锦囊妙计 网站推广101招 第7版》扫描版[PDF]
  2. 企业微信对外收款使用指南
  3. 华为路由器负载均衡_华为路由器配置利用NAT实现TCP负载均衡
  4. 抖音直播弹幕协议解析记录
  5. 一般情况下UniApp打包上线APP流程
  6. atom配置python_在Atom中设置Python开发环境
  7. 软件测试查漏补缺(一)——驱动开发、系统测试、测试工具
  8. YepEda Allegro Skill学习版
  9. 【视觉SLAM十四讲】第八讲 光流法与直接法
  10. Outlook2019版本的收发邮件设定