二分查找及STL
来源:互联网 发布:包就业java 培训班 编辑:程序博客网 时间:2024/06/05 04:52
二分查找及STL函数
一个人在决定与计算机打交道时,就注定与2分不开,当然不是说性格,2在算法中应用得极为广泛,倍增、二叉树、二分答案、快排、快速幂……当然,最基础的还是二分查找。
针对在一个序列中查找一个数的问题,我们当然可以暴力枚举,但是在面对大数据时,未免有些不够看,相信玩过猜数游戏的哥们应该知道怎么快速的猜到一个范围内数,那就是每次猜中间,这就是二分的思想,但是,这有一个前提:有序数列
先献上我丑陋的模板代码:
#include <bits/stdc++.h>using namespace std;int a[1000],p,n;int binary_s(int l,int r,int tar)//l是搜索范围左边界,r是右边界,tar是所搜索的数{int mid=(l+r)/2;//二分if(tar==a[mid]) return mid;//找到了就返回下标else if(a[mid]>tar) binary_s(l,mid-1,tar);//大了,在更小的一半找else if(a[mid]<tar) binary_s(mid+1,r,tar);//小了……}int main(){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];sort(a+1,a+n+1);//记得排序哦cin>>p;int temp=binary_s(1,n,p);cout<<a[temp]<<endl;return 0;}接下来的几段对于纯代码爱好者就不用看了……对于二分这种常用函数当然是有STL的啦!
1.函数结构及种类
1.binary_search(目标数组头地址,搜索上界地址,目标数字);
2.lower_bound(目标数组头地址,搜索上界地址,目标数字);
3.upper_bound(目标数组头地址,搜索上界地址,目标数字);
2.返回值
1.binary_search返回一个布尔值,1就是找到了目标,0就是没有
2.lower_bound返回数组中第一个大于等于目标数字的地址!!地址!!
3.upper_bound返回数组中第一个大于目标数字的地址!!地址!!
3.注意事项
1.有序数列,先sort一发
2.头文件啊#include <algorithm>
3.lower_bound和upper_bound返回值要转化为下标记得减一个头地址,像这样
int a[10000],n;lower_bound(a,a+10000,n)-a;upper_bound(a,a+10000,n)-a;
至于模板题……全网到处都是,谢谢
阅读全文
1 0
- 二分查找及STL
- STL中的二分查找
- STL中的二分查找
- STL之二分查找
- STL 二分查找
- STL 二分查找
- C++STL二分查找函数集及补充
- 利用STL二分查找范围
- STL中二分查找 lower_bound()
- 有关二分查找的STL
- 二分查找 C 、C++STL
- stl——二分查找
- 二分查找STL初体验
- STL中的二分查找函数
- 二分查找及扩展
- 二分查找及勘误
- 二分查找及变种
- 二分查找及扩展
- [BZOJ]4953: [Wf2017]Posterize DP
- poj 3728 The merchant
- 使用zTree插件实现可拖拽的树
- 数据结构与算法(9)---Java语言实现:希尔排序
- 【分治计数|单调栈】51Nod 1215 数组的宽度
- 二分查找及STL
- UVa 12216 表达式树,map(不会)
- HD-27-水池数目(搜索)
- minnowboard 安装ubuntu16.04系统
- pgsql查询统计每天的数据
- 第一篇占个坑
- Java深度历险(二)——Java类的加载、链接和初始化
- Unity_制作Loading场景进度条_效果实现
- null的比较