STL(standard template library) 包含头文件 #include<algorithm.h>
一、sort排序算法
1、sort排序(用法一):
sort(数组名+n1,数组名+n2),表示将数组中下标n1至n2的元素从小到大排序。
注意:[n1,n2)区间为左闭右开,不包含n2元素。
2、sort排序(用法二):
sort(数组名+n1,数组名+n2,greater<T>())表示将基本类型为T的数组元素,在[n1,n2)区间里从大到小排序,使用时将T替换成对应的int、double等。
3、sort排序(用法三):
sort(数组名+n1,数组名+n2,排序规则结构名())表示用自定义的排序规则,对任何数组进行排序。
排序规则定义方式:
struct 结构名
{
bool operator()(const T &a1,const T &a2)
{
//若a1应该排在a2前面,则返回true;
//否则返回false
}
}
示例:
struct Rule
{
bool operator()(const int &a1,const int &a2)
{
return a1%10<a2%10;
//按个位数从小到大排序
}
}
二、STL二分查找算法
1、binary_search二分法(用法一)
binary_search(数组名+n1,数组名+n2,值)表示在下标[n1,n2)区间内查找“等于值”的元素。
”等于“的含义:a=b a<b&&b<a 不成立。
2、binary_search二分法(用法二)
binary_search(数组名+n1,数组名+n2,值,排序规则结构名())表示在自定义规则下排好序的,元素为任意T类型的数组中进行二分查找。
注意:查找时的排序规则和排序时的必须一致,binary_search二分法输出的是布尔值,找到的话为true,未找到的话为false。
”等于“的含义:a等于b”a必须排在b前面“&&”b必须排在a前面“都不成立。
3、lower_bound二分查找下界(用法一)
T * lower_bound(数组名+n1,数组名+n2,值)表示在从小到大排序的基本类型数组中,进行查找,返回一个T类型的指针。
返回的指针p指向查找区间大于等于”值“且下标最小的元素,如果找不到,*p指向下标为n2的元素。
4、lower_bound二分查找下界(用法二)
T * lower_bound(数组名+n1,数组名+n2,值,排序规则结构名())表示查找区间里,按照规定的排序规则,可以排在”值“后面(大于等于)且下标最小的元素。如果找不到,指向下标为n2的元素。
5、upper_bound二分查找上界(用法一)
T * upper_bound(数组名+n1,数组名+n2,值)表示在从小到大排序的基本类型数组中,进行查找,返回一个T类型的指针。
返回的指针p指向查找区间大于”值“且下标最小的元素,如果找不到,*p指向下标为n2的元素。
6、upper_bound二分查找上界(用法二)
T * upper_bound(数组名+n1,数组名+n2,值,排序规则结构名())表示查找区间里,按照规定的排序规则,必须排在”值“后面(大于)且下标最小的元素位置。如果找不到,指向下标为n2的元素。
注意:在排序规则里没有“大”和“小”的概念,只有“谁在前谁在后”