sort函数包含在头文件#include<algorithm>中,有三种用法
1)对基本类型的数组从小到大排序
sort(数组名+n1,数组名+n2)
将数组中下标为【n1.n)的元素进行排序
eg:a[]={2,4,3,8,6}
sort(a+1,a+3);//结果为2,3,4,8,6
2)对元素类型为T的基本数组类型从大到小排序
sort(数组名+n1,数组名+n2,greater<T>());
3)用自定义的排序规则对任何类型为T的数组排序
sort(数组名+n1,数组名+n2,排序规则结构名());
排序规则结构的定义方式:
struct 结构名{
bool operator()(const T &a1,const T & a2){
若a1应该在a2的前面,则返回true,否则返回false;
}
}
程序案例一
#include<iostream>
#include<algorithm>
using namespacestd;
//排序规则结构定义
struct Rule1{//从大到小排序
bool operator()(const int &a,const int&b){
return a>b;
}
};
struct Rule2{//按个位数从小到大排序
bool operator()(const int &a,const int&b){
return a%10<b%10;
}
};
void print(inta[],int size){
for(int i=0;i<size;i++)
cout<<a[i]<<"";
cout<<endl;
}
int main(){
int a[]={12,45,3,98,21,7};
cout<<"原数组为:";
print(a,sizeof(a)/sizeof(int));
cout<<endl;
sort(a,a+sizeof(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)) ;
cout<<"3)个位数从小到大排序为:";
sort(a,a+sizeof(a)/sizeof(int),Rule2());
print(a,sizeof(a)/sizeof(int));
system("pause");
return 0;
}
程序案例二:(对结构体数组进行排序进行排序)
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
struct student{
char name[20];
int num;
double gpa;
};
student stu[]={
{"Jack",112,3.4},{"Mary",102,3.8},{"Ala",333,3.5},{"Zero",101,4.0}
};
struct byName{//按姓名从小到大排
bool operator()(conststudent & A,const student &B){
if(strcmp(A.name,B.name)<0)
return true;
return false;
}
};
struct byNum{//按学号从小到大排
bool operator()(conststudent &A,const student &B){
return A.num<B.num;
}
};
struct byGpa{//按绩点从高到低排
bool operator()(conststudent &A,const student &B){
return A.gpa>B.gpa;
}
};
void print(student stu[],int size){
for(int i=0;i<size;i++)
cout<<"("<<stu[i].name<<","<<stu[i].num<<","<<stu[i].gpa<<")";
cout<<endl;
}
int main(){
intn=sizeof(stu)/sizeof(student);
cout<<"原数据为:";
print(stu,n);
cout<<endl;
sort(stu,stu+n,byName());
cout<<"按姓名排序为:";
print(stu,n);
sort(stu,stu+n,byNum());
cout<<"按学号排序为:";
print(stu,n) ;
sort(stu,stu+n,byGpa());
cout<<"按绩点排序为:";
print(stu,n);
system("pause");
return 0;
}