STL排序算法
STL简介
- STL:标准模板库。
- 包含一些常用的算法如排序查找,还有常用的数据结构如可变长数组,链表,字典等。
- 使用方便,效率较高
- 要使用其中的算法,需要#include < algorithm>
sort排序
用法一:
对基本数据类型的数组从小到大排序:
sort(数组名+n1,数组名+n2);
n1和n2都是int类型的表达式,可以包含变量。
如果n1=0,则+n1可以不写
将数组中下标范围为[n1,n2)的元素从小到大排序。下标为n2的元素不在排序区间内。
例如:
int a[]={12,23,24,23,23,2,3};
sort(a,a+7)//对整个数组进行从小到大排序
int a[]={12,3,4,5,6,67,7};
sort(a,a+3);//结果{3,4,12,5,6,67,7}
int a[]={15,4,3,9,7,2,6};
sort(a+2,a+5);//结果:{15,4,3,7,9,2,6}
用法二:
对元素类型为T的基本类型数组从大到小排序:
sort(数组+n1,数组+n2,greater() );
例如:
int a[]={15,4,3,9,7,2,6};
sort(a+1,a+4,greater<int>());//结果:{15,9,4,3,7,2,6,}
用法三:
用自定义的排序规则,对任何类型T的数组排序
sort(数组+n1,数组+n2,排序规则结构名());
排序规则结构的定义方法:
struct 结构名
{
bool operator()(const T & a1,const T & a2)const{
//若a1应该在a2前面,则返回true.
//否则返回false.
}
};
具体例子:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
struct Rule1//从大到小
{
bool operator()(const int & a1,const int & a2)const {
return a1>a2;
}
};
struct Rule2//按个位数从小到大排序
{
bool operator ()(const int & a1,const int & a2)const {
return a1%10<a2%10;
}
};
void print(int a[],int size)
{
for (int i=0;i<size ;++i)
cout<<a[i]<<",";
cout<<endl;
}
int main()
{
int a[]={12,45,3,98,21,7};
sort(a,a+sizezof(a)/sizeof(int));//从小到大
cout <<"1";print(a,sizeof(a)/sizeof(int));
sort(a,a+sizeof(a)/sizeof(int),Rule1());//从大到小
cout<<"2";print(a,sizeof(a)/sizeof(int));
sort(a,a+sizeof(a)/sizeof(int),Rule2);//按个位数从小到大
cout<<"3";print(a,sizeof(a)/sizeof(int));
return 0;
}
用sort对结构数组进行排序
改一下排序规则而已