STL提供在排好序的数组上进行【二分查找算法】O (log 2 n)
- binary_search();
- T * lower_bound();
- T * upper_bound();
头文件:#include <algorithm>
用binary_search进行二分查找
用法一
- 在从小到大排好序的基本类型数组中进行二分查找
binary_search(数组名+n1,数组名+n2,值);
- n1和n2都是int类型的表达式,可以包含变量;n1=0,+n1可以省略
- 查找区间为[n1,n2),在该区间内查找等于“值”的元素,找到返回true,找不到返回false
- 等于:a等于b <=> a<b 和 b<a 都不成立
用法二
- 在用自定义排序规则排好序的、元素为任意的T类型的数组中进行二分查找
binary_search(数组名+n1,数组名+n2,值,排序规则结构名);
- n1和n2都是int类型的表达式,可以包含变量;n1=0,+n1可以省略
- 查找区间为[n1,n2),在该区间内查找等于“值”的元素,找到返回true,找不到返回false
- 等于:a等于b <=> “a必须在b前面” 和 “b必须在a前面” 都不成立
- 查找时的排序规则,必须和排序时的规则一致!否则返回值为false
用lower_bound二分查找下界(大于等于值)
用法一
- 在对元素类型为T的从小到大排好序的及基本类型的数组中查找
T * lower_bound(数组名+n1,数组名+n2,值);
- 返回一个指针 T * p;
- *p 是查找区间里下标最小的,大于等于“值”的元素(下界)
- 如果找不到,*p指向下标为n2的元素(不在查找区间里,查找区间后的第一个值)
用法二
- 在用自定义排序规则排好序的、元素为任意的T类型的数组中查找
T * lower_bound(数组名+n1,数组名+n2,值,排序规则结构名());
- 返回一个指针 T * p;
- *p 是查找区间里下标最小的,按自定义规则,可以排在“值”后面的元素
- 如果找不到,*p指向下标为n2的元素(不在查找区间里,查找区间后的第一个值)
- 查找时的排序规则,必须和排序时的规则一致!否则返回值为false
用upper_bound二分查找上界(大于值)
用法一
- 在元素类型为T的从小到大排好序的基本类型的数组中进行查找
T * upper_bound(数组名+n1,数组名+n2,值);
- 返回一个指针 T * p;
- *p 是查找区间里下标最小的,大于“值”的元素
- 如果找不到,*p指向下标为n2的元素
用法二
- 在用自定义排序规则排好序的、元素为任意的T类型的数组中查找
T * upper_bound(数组名+n1,数组名+n2,值,排序规则结构名());
- 返回一个指针 T * p;
- *p 是查找区间里下标最小的,按自定义排序规则,必须排在“值”后面的元素
- 如果找不到,*p指向下标为n2的元素