二分查找
二分查找
1. 二分查找的前提
-
适用数据结构:只能对数组或类似数组的容器(如vector)进行二分查找
-
单调性要求
-
数组元素必须保持单调性,一般为单调不减(允许相等元素)
-
单调不增数组也可使用,但需要修改比较函数(方法与sort自定义比较类似)
-
2. binary_search函数
-
功能:在已排序序列中检查目标元素是否存在
-
返回值:布尔值(true/false),表示查找结果
-
参数格式:binary_search(numbers.begin(),numbers.end(),target)
-
使用注意
-
无法直接获取元素位置,仅返回存在性判断
-
如需获取位置信息,需配合lower_bound/upper_bound使用
-
-
示例流程
-
对vector排序(如[1,3,5,7,9])
-
调用binary_search查找target
-
根据返回值输出相应提示信息
-
3. lower_bound和upper_bound函数
-
共同前提:数组必须为非降序(可通过自定义比较函数处理非升序数组)
-
lower_bound
-
返回[st,ed)范围内第一个大于等于x的元素的地址(地址-首地址=下标)
-
获取下标方法:lower_bound(...) - 首地址
-
lower_bound(v.begin(),v.end(),8)-v.begin())
-
-
upper_bound
-
返回[st,ed)范围内第一个严格大于x的元素的地址
-
不存在时两者都返回end()(最后一个元素的下一个位置)
-
-
应用场景
-
确定元素出现区间:[lower_bound, upper_bound)为x的完整出现范围
-
示例:在排序后的[1,3,5,7,9,10,18]中查找8,lower_bound返回9的位置(下标4)
-
4.应用案例
-
复杂度对比
-
暴力查找:O(n)时间复杂度
-
二分查找:O(logn)时间复杂度,效率显著提升
-

浙公网安备 33010602011771号