二分查找及STL
2017-09-21 21:50
183 查看
二分查找及STL函数
一个人在决定与计算机打交道时,就注定与2分不开,当然不是说性格,2在算法中应用得极为广泛,倍增、二叉树、二分答案、快排、快速幂……当然,最基础的还是二分查找。
针对在一个序列中查找一个数的问题,我们当然可以暴力枚举,但是在面对大数据时,未免有些不够看,相信玩过猜数游戏的哥们应该知道怎么快速的猜到一个范围内数,那就是每次猜中间,这就是二分的思想,但是,这有一个前提:有序数列
先献上我丑陋的模板代码:
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返回值要转化为下标记得减一个头地址,像这样
至于模板题……全网到处都是,谢谢
一个人在决定与计算机打交道时,就注定与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;
至于模板题……全网到处都是,谢谢
相关文章推荐
- STL 二分查找抛出错误(map/set iterator not dereferencable)
- STL中二分查找 lower_bound()
- 032day(STL中的二分查找算法)
- zoj 2029【二分查找】或【STL】
- STL中与二分查找相关的4个函数(转)
- C++ STL 二分查找函数(lower_bound 和 upper_bound)
- STL之二分查找(binary_search(),lower_bound(),upper_bound() )
- 数据结构实验之查找四:二分查找模板+STL
- STL中的二分查找——lower_bound 、upper_bound 、binary_search
- STL 二分查找三兄弟(lower_bound(),upper_bound(),binary_search())
- STL中的二分查找(binary_search)
- STL之二分查找 (Binary search in STL)
- STL之二分查找 (Binary search in STL)
- STL之二分查找
- STL之二分查找 (Binary search in STL)
- 语法:STL中的有关二分查找的算法
- STL中的二分查找——lower_bound 、upper_bound 、binary_search
- STL之二分查找(binary_search(),lower_bound(),upper_bound() )
- 二分查找与STL中的lower_bound(),upper_bound(),binary_search()
- ACM 贪心 STL multiset 二分查找 hdu4268