STL提供在排好序的数组上进行二分查找的算法
binary_search lower_bound upper_bound
(1)在从小到大排好序的基本类型数组上进行二分查找
binary_search(数组名+n1,数组名+n2,值); 下标为n2的元素不在查找区间内 在该区间内查找"等于"值”的元素,返回值为true(找到)或false(没找到)
在用自定义排序规则排好序的、元素为任意的T类型的数组中进行二分查找
binary_search(数组名+n1,数组名+n2,值,排序规则结构名());
(2)在对元素类型为T的从小到大排好序的基本类型的数组中进行查找
T * lower_bound(数组名+n1,数组名+n2,值);返回值是指针*p,*p 是查找区间里下标最小的,大于等于"值" 的元素。如果找不到,p指向下标为n2的 元素
(3)在元素类型为T的从小到大排好序的基本类型的数组中进行查找
T * upper_bound(数组名+n1,数组名+n2,值);
返回一个指针 T * p;
*p 是查找区间里下标最小的,大于"值"的元素。如果找不到,p指向下标为n2的元素
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
int a[5]={1,6,4,3,9};
sort(a,a+5);
printf("result:%d\n",binary_search(a,a+5,4));//返回值为0或1,1
printf("result:%d\n",*lower_bound(a,a+5,6));//大于等于6的下标最小的元素,6
printf("result:%d\n",*upper_bound(a,a+5,6));//大于6的下标最小的元素,9
}