二分查找头文件:
#include<algorithm>
binary_search函数
二分查找使用是基于数组是有序的,因此在使用二分查找之前要确保数组已经进行了排序。
binary_search函数需要传入三个参数,第一个参数查找开始元素的地址,第二个参数是查找结束的地址,第三个元素是需要查找的值。返回值是一个bool值,如果数组中存在要找的值,则返回true,否则返回false。
lower_bound函数
lower_bound的功能是查找数组中大于等于传入参数的第一个元素。它的返回值是元素的位置地址,因此是一个指针类型。该函数的参数也是和binary_search一样,有三个。如果数组中存在大于传入参数的元素,则返回该元素的地址指针,否则返回数组最后一个元素后面的一个指针。
upper_bound函数
upper_bound的功能是查找数组中大于传入参数的第一个元素元素,它的参数与返回值和lower_
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void testBinarySearch() {
vector<int> arr = { 1,2,3,4,5,6,7,8,9 };
if (binary_search(arr.begin(), arr.end(), 5)) {
cout << "数字5在数组中" << endl;
}
int arr1[] = { 1,2,3,4,5,6,7,8,9 };
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();
}
bound一样。