目录
二分查找的前提
库函数只能对数组进行二分查找。
对一个数组进行二分查找的前提是这个数组中的元素是单调的,一般为单调不减。(单调不增需要修改比较函数)
例:
[1,2,2,3,4]是单调递增的;[1,3,2,2,1]不是单调的;[5,5,4,3,2]是单调的。
binary_search函数
binary_search函数是C++标准库中的一个算法函数,用于在已知排序的序列(数组or容器 一般是vector)中查找特定元素。
它通过二分查找算法确定序列中是否存在目标元素。
函数返回一个bool值,表示目标元素是否存在于序列中。
如果需要找到元素的位置,用std::lower_bound or std::upper_bound函数。
lower_bound和upper_bound
前提:数组必须为非降序
lower_bound(st,ed,x)返回地址[st,ed)中第一个大于等于x的元素的地址。
upper_bound(st,ed,x)返回地址[st,ed)中第一个大于x的元素的地址。
例题:二分查找数组元素
题目描述
给定一个数组,其采用如下代码定义:
int data[200];
for(i=0;i<200;i++)data[i] = 4*i+6;
先给定某个数(在data数组中),请你给出它在数组中的位置。
输入描述
输入一个待查找的整数(该整数一定在数组data中)。
输出描述
输出该整数在数组中的指标。
输入输出实例
样例输入
262
样例输出
64
解决方案
代码
cpp
#include<iostream>
using namespace std;
int main()
{
int data[200];
for (int i = 0; i < 200; i++)
{
data[i] = 4 * i + 6;
}
int target;
cin >> target;
cout << (lower_bound(data, data + 200, target) - data) << endl;
system("pause");
return 0;
}