C++学习笔记 之 二分查找

本文深入解析C++中二分查找的实现方法,包括binary_search、lower_bound和upper_bound函数的使用技巧与示例代码,帮助读者掌握高效查找算法。

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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值