1. 二分查找头文件
在c++中要使用二分查找函数需要使用algorithm头文件,即使用之前需要加上:
#include<algorithm>
2. binary_search函数介绍
二分查找使用是基于数组是有序的,因此在使用二分查找之前要确保数组已经进行了排序。
binary_search函数需要传入三个参数,第一个参数查找开始元素的地址,第二个参数是查找结束的地址,第三个元素是需要查找的值。返回值是一个bool值,如果数组中存在要找的值,则返回true,否则返回false。
在使用的时候我测试了一些,第一个参数和第二参数也可以传入容器的迭代器。因此binary_search也可以使用在有序的容器上。
3. lower_bound函数介绍
lower_bound的功能是查找数组中大于等于传入参数的第一个元素。它的返回值是元素的位置地址,因此是一个指针类型。该函数的参数也是和binary_search一样,有三个。如果数组中存在大于传入参数的元素,则返回该元素的地址指针,否则返回数组最后一个元素后面的一个指针,相当于容器中的end指针。
4. upper_bound函数介绍
upper_bound的功能是查找数组中大于传入参数的第一个元素元素,它的参数与返回值和lower_bound一样,就不详细说明了。
5. 代码示例
最后话不多说,放上这三个函数的应用实例。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
/**
*测试二分查找
*@param 没有参数
@return 没有返回值
*/
void testBinarySearch() {
vector<int> arr = { 1,2,3,4,5,6,7,8,9 };
//binary_search函数是查找数组中是否包含某个元素,仅仅判断是否存在,返回的是一个bool类型的值
//如果数组中包含要查找的元素,那么返回true,否则返回false
if (binary_search(arr.begin(), arr.end(), 5)) {
cout << "数字5在数组中" << endl;
}
int arr1[] = { 1,2,3,4,5,6,7,8,9 };
//lower_bound函数是找到数组中第一个大于等于所传参数的元素的地址。返回的是元素的地址指针。
//如果数组中存在大于等于所传参数的元素,那么返回元素的地址指针,否则返回end指针
int *index = lower_bound(arr1, arr1+9, 10);//查找失败,返回的是最后一个元素后面一个指针
cout << *index << endl;
index = lower_bound(arr1, arr1 + 9, 5);//查找成功,返回的是数组中5这个元素的地址指针
cout << *index << endl;
//upper_bound函数是查找数组中第一个大于所传参数的元素的地址,返回的也是元素的地址指针。
//如果数组中存在比所传参数大的元素,那么返回该元素所在的地址指针,否则返回end指针
int *index2 = upper_bound(arr1, arr1 + 9, 9);
cout << *index2 << endl;
index2 = upper_bound(arr1, arr1 + 9, 5);//查找成功,返回的是数组中6这个元素的地址指针
cout << *index2 << endl;
}
int main(int argc, char *argv[]) {
//测试二分查找
cpp1::testBinarySearch();
}
结果为:
数字5在数组中
-858993460
5
-858993460
6
本文深入解析C++中二分查找的实现方法,包括binary_search、lower_bound和upper_bound函数的使用技巧与示例代码,帮助读者掌握高效查找算法。
461

被折叠的 条评论
为什么被折叠?



