sort(数组名+n1,数组名+n2) ;这种就是简单的从小到大排序
(n1是开始排序位置的下标,n2是结尾位置的下标+1)
sort(数组名+n1,数组名+n2,greater<T>);(T是要排序的数据类型)从大到小排序
sort(数组名+n1,数组名+n2,排序规则结构名());这种就比较厉害了
这里举了一个例子 sort最强大的功能 :对结构进行排序 并且可以自定义排序规则
代码如下
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm>//使用STL算法需要引用的头文件 using namespace std; typedef struct { char name[20]; int id; double gpa; }student;//定义一个结构 包含学生姓名 id gpa; student s[]={ {"JACK",112,3.4},{"MARRY",102,3.8},{"MARRY",117,3.9}, {"ALA",333,3.5},{"ZERO",101,4.0} };//创建一个结构数组 //定义排序规则 1(结构类型) //按名字字母排序 struct studentrule1{ bool operator()(const student&s1,const student&s2)const{ if(stricmp(s1.name,s2.name)<0)//stricmp和strcmp相比 stricmp忽略大小写字母顺序排序 { return true;//如果s1.name比s2.name小的话 s1放在s2的前面 }else{ return false; } } }; //定义排序规则2(结构类型) //按学生id排序 struct studentrule2{ bool operator()(const student&s1,const student&s2)const{ return s1.id<s2.id;//如果s1.id<s2.id s1在s2的前面 } }; //定义排序规则3(结构类型) //按学生gpa从高到低排序 struct studentrule3{ bool operator()(const student&s1,const student&s2)const{ return s1.gpa>s2.gpa;//如果s1.gpa>s2.gpa s1放在s2的前面 } }; //定义一个打印结构的函数 void print(student s[],int len){ for(int i=0;i<len;i++){ cout<<"("<<s[i].name<<","<<s[i].id <<","<<s[i].gpa<<")"<<endl; } return ; } int main(){ int n=sizeof(s)/sizeof(s[0]); cout<<"1)"; sort(s,s+n,studentrule1());print(s,n);//注意:sort(数组名+n1,数组名+n2,排序规则)n2是要排序的元素个数 //也就是末尾下标+1,而不是最后一个下标 //n1是开始排序位置的下标 cout<<endl<<"2)"; sort(s,s+n,studentrule2());print(s,n); cout<<endl<<"3)"; sort(s,s+n,studentrule3());print(s,n); return 0; }