C++STL二分查找函数集及补充
来源:互联网 发布:苗疆真的有蛊吗 知乎 编辑:程序博客网 时间:2024/06/07 20:59
C++中还是有许多我未了解或者不常用的函数,比如今天写下的一些二分函数,还是挺有用的,不仅仅可以减少代码量,而且能够增加时间的利用率。(目前我只学了简单的数组查找,有待补充)
大概有以下几个STL中的二分查找函数:
binary_search(a,a+n,key) //返回是否存在值bool型的 lower_bound(a,a+n,key) //下面两个都是指针型的 upper_bound(a,a+n,key) /*升序排列的容器: lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 upper_bound( const key_type &key ): 返回一个迭代器,指向键值>key的第一个元素。 //降序排列的容器: lower_bound( const key_type &key ): 返回一个迭代器,指向键值<= key的第一个元素。 upper_bound( const key_type &key ):返回一个迭代器,指向键值<key的第一个元素。 */以下介绍一下手工写的二分函数,也可以改成系STL的函数:
一、判断是否存在key值:
bool search(int A[], int n, int target){ int low = 0, high = n-1; while(low <= high) { int mid = low+((high-low)>>1); if(A[mid] == target) return true; else if(A[mid] < target) low = mid+1; else high = mid-1; } return false;}二、存在相同key值时查找最先出现的位置:
//此函数返回的是第几个元素,非数组下标int lower_search(int A[], int n, int target){ int low = 0, high = n-1; while(low <= high) { int mid = low+((high-low)>>1); if(A[mid] == target) { if(mid > 0 && A[mid-1] == target) high = mid-1; else return mid; } else if(A[mid] < target) low = mid+1; else high = mid-1; } return -(low+1);}
三、存在相同元素的时候,返回最后出现的位置:
//此函数返回的是第几个元素,非数组下标int upper_search(int A[], int n, int target){ int low = 0, high = n-1; while(low <= high) { int mid = low+((high-low)>>1); if(A[mid] == target) { if(mid < n-1 && A[mid+1] == target) low = mid+1; else return mid; } else if(A[mid] < target) low = mid+1; else high = mid-1; } return -(low+1);}三、存在多个key值时,返回位置差:
int equal_search(int A[], int n, int target){ int tmp = upper_search(A, n, target)-lower_search(A, n, target); return tmp;}
0 0
- C++STL二分查找函数集及补充
- 二分查找及STL
- 二分查找 C 、C++STL
- STL中的二分查找函数
- stl中二分查找相关的函数
- 二分查找-补充
- 二分查找(补充)
- STL中的二分查找
- STL中的二分查找
- STL之二分查找
- STL 二分查找
- STL 二分查找
- 二分查找(待补充)
- STL中与二分查找相关的4个函数
- 【C语言】编写函数实现二分查找
- 利用STL二分查找范围
- STL中二分查找 lower_bound()
- 有关二分查找的STL
- Permanently added the RSA host key for IP address '192.30.252.130' to the list of known hosts.
- Web.xml配置中目前需要掌握的知识点
- HDU 1969--Pie【二分】
- HDU - 1237 - 简单计算器(栈)
- 红杏 插件 可以访问谷歌等
- C++STL二分查找函数集及补充
- flume+es+kibana日志系统
- 一起来-塑造阳光生活,乐享多彩历程
- Java 8之方法引用(Method References)
- typedef用法小结
- unity 对象池技术
- Linux文件系统的简单操作 - df, du, ln
- 知行合一1
- AlphaBeta剪枝算法