分治算法之二分查找
来源:互联网 发布:ubuntu16.04安装python 编辑:程序博客网 时间:2024/05/22 10:30
c++提供一类STL函数来实现对数组中元素的检索,其中较为简单且应用较广的是binary_search,upper_bound和lower_bound,它们都被包含在头文件#include中。
lower_bound(g) 用来找以g为下界的第一个元素,而upper_bound(g)则用来找以g为上界的最后一个元素,他们的返回值都是指向目标元素的迭代器(指针)。
用法如下:
//STL//lower_bound与upper_bound #include<iostream>#include<algorithm>//包含这两个界限函数的头文件 #include<cstdio>using namespace std;int a[]={0,4,4,11,30,69,70,96,100},n=8,m,x,y,z,w; void find_lower_bound(int aim){ int x=1,y=n,m; while(x<y) { int m=x+(y-x)/2; if(a[m]>=aim) y=m; else x=m+1; } printf("\nlower_bound:%d",x);//因为最后x=y,所以输出x和输出y是一样的 }void find_upper_bound(int aim){ int x=1,y=n,m; while(x<y) { int m=x+(y-x)/2; if(a[m]<=aim) x=m+1; else y=m; } printf("\nupper_bound:%d",x);//同上 }int main(){// std::ios::sync_with_stdio(false);//这句话用来加快cin和cout的速度,但使用后cin,cout不能与scanf,printf混用,所以慎用// cin>>n;// for(int i=1;i<=n;i++) scanf("%d",&a[i]);// sort(a+1,a+n+1);// cin>>m; x=lower_bound(a,a+n,3)-a;//要注意写法 y=upper_bound(a,a+n,4)-a; z=binary_search(a,a+n,11);//判断是否存在,是返回真值 w=binary_search(a,a+n,3);//不存在则返回假值 printf("%d %d %d %d ",x,y,z,w); find_lower_bound(3);//函数原型 find_upper_bound(4);//函数原型 return 0; }
这里的函数原型其实是二分算法,注意两个函数的区别在于当a[m]=aim时到底是向前缩短区间还是向后缩短区间,这关系到最后x的取值。
阅读全文
0 0
- 分治算法之二分查找
- 分治算法--1. 二分查找
- 二分查找(分治算法)
- 分治算法解决二分查找
- 分治法之二分查找
- 分治思想之二分查找
- 【算法·递归与分治】二分查找
- 02分治算法-01二分查找
- 算法之二分查找
- 算法之二分查找
- 算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- poj 2488 dfs
- POJ 1986 Distance Queries 笔记
- Android开发中那些让你相见恨晚的方法、类或接口
- jquery中$.cookie()的使用
- Kotlin在Android上令人惊叹的技巧
- 分治算法之二分查找
- WebSocket API总结
- Android的日志工具Log
- 拆点 费用流 BZOJ 1877 晨跑
- 71. Simplify Path
- Android 异步消息处理机制解析
- POJ 1987 Distance Statistics 笔记
- 使用adb命令获取设备UI(hierarchy)信息
- 新安装的wampserver如何使用本机已有的mysql作为数据库