注:二分查找相信大家都知道了,如果你还不了解二分查找,可以先访问此网站来初步了解并学习二分查找这个算法。
https://blog.youkuaiyun.com/SkeletonKing233/article/details/99447270
一些类似模版一样的经典二分查找题目每次都得写一遍长长的代码,很浪费时间。而algorithm头文件为了避免大家浪费掉宝贵的时间,就出了三个二分查找的函数。
这些函数分别是binary_search、lower_bound和upper_bound函数,它们都是用二分查找来完成任务的log2(n)级别的函数,并且都定义在algorithm头文件中。
binary_search函数
所在头文件:algorithm
binary_search(a + begin, a + end, k, cmp);
必要条件:从a[begin]开始到a[end - 1]的序列是有序序列。
功能:在数组a中从a[begin]开始到a[end - 1]按照cmp函数来比较进行二分查找有没有一个数等于k。
返回值:如果有一个数等于k则返回值为true,否则为false
参数:
- 首地址(a + begin) 必要
- 末地址(a + end) 必要
- 需要搜索的值 必要
- 比较函数表示序列如何有序(多数情况下适用于对结构体的搜索) 选要
lower_bound函数
所在头文件:algorithm
lower_bound(a + begin, a + end, k, cmp);
必要条件:从a[begin]开始到a[end - 1]的序列是有序序列。
功能:在数组a中从a[begin]开始到a[end - 1]按照cmp函数来比较进行二分查找第一个大于等于k的数的位置,如果有第一个大于等于k的数则返回该数的地址,否则返回a[end]的地址。
返回值:地址。如果要转换为int,需减去数组a。
参数:
- 首地址(a + begin) 必要
- 末地址(a + end) 必要
- 需要比较的值 必要
- 比较函数表示序列如何有序(多数情况下适用于对结构体的搜索) 选要
upper_bound函数
所在头文件:algorithm
upper_bound(a + begin, a + end, k, cmp