头文件:algorithm
时间复杂度:类似于快排,为nlog(2)n,效率较高。
sort函数有三个参数:
- 要排序数组的起始地址
- 要排序数组的最后一个数据元素的下一个地址
- 排序方法,如果没有排序方法的话,默认从小到大排序
//sort函数对string内的字符进行排序(string为字符串类型数据)
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
bool cmp(char a,char b)///比较函数
{
return a>b;
}
int main()
{
string s;
cin>>s;
sort(s.begin(),s.end());///从小到大
cout<<s<<endl;
sort(s.begin(),s.end(),cmp);///从大到小
cout<<s<<endl;
cout<<s.length()<<endl;///字符串长度函数
return 0;
}
//sort对一维字符数组内的字符进行排序
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
bool cmp(char a,char b)///比较函数
{
return a>b;
}
int main()
{
char a[100];
scanf("%s",a);
sort(a,a+strlen(a));///从小到大
cout<<a<<endl;
sort(a,a+strlen(a),cmp);///从大到小
cout<<a<<endl;
cout<<strlen(a)<<endl;///输出字符数组a的长度
return 0;
}
//sort对string类型的数组按照字典序排序
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<cstring>
using namespace std;
bool cmp(string a,string b)///按照字典序从大到小排序
{
return a>b;
}
int main()
{
int i,j;
string s[12]=
{
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
};
sort(s,s+12);///字符串默认按照字典序从小到大排序,数默认按照大小从小到大排序
for(i=0;i<12;i++)
cout<<s[i]<<endl;
cout<<endl;
sort(s,s+12,cmp);///按照字典序从大到小排序
for(i=0;i<12;i++)
cout<<s[i]<<endl;
return 0;
}
//sort对string类型的数组根据长度进行排序
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<cstring>
using namespace std;
bool cmp1(string a,string b)///按照长度从小到大排序
{
return a.length()<b.length();
}
bool cmp2(string a,string b)///按照长度从大到小排序
{
return a.length()>b.length();
}
int main()
{
int i,j;
string s[12]=
{
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
};
sort(s,s+12,cmp1);///按照长度从小到大排序
for(i=0;i<12;i++)
cout<<s[i]<<endl;
cout<<endl;
sort(s,s+12,cmp2);///按照长度从大到小排序
for(i=0;i<12;i++)
cout<<s[i]<<endl;
return 0;
}
//对结构体数组进行排序(根据结构体中的某元素)
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int n=3;
struct Student
{
char name[20];///姓名
char id[20]; ///学号
int score; ///成绩
int r; ///排名
}stu[100010];
/*
(1)如果两个学生的分数不同,则分数高的排在前面
(2)否则,将姓名字典序小的排在前面
*/
bool cmp(Student a,Student b)
{
if(a.score!=b.score) return a.score>b.score;
else return strcmp(a.name,b.name)<0;
}
/*
排名的实现,一般规则为:分数不同,排名不同,分数相同排名相同但占用同一个排位
例如:分数为90,88,88,88,86;排名为1,2,2,2,5
*/
void Rank()
{
int i,j;
stu[0].r=1;
for(i=1;i<n;i++)
{
if(stu[i].score==stu[i-1].score) stu[i].r=stu[i-1].r;
else stu[i].r=i+1;
}
}
int main()
{
int i,j;
stu[0]={"guo","001",82,3};///这样赋值不对,算了,以后再改吧
stu[1]={"zhang","002",82,3};
stu[2]={"wu","003",99,2};
sort(stu,stu+n,cmp);
for(i=0;i<n;i++)
cout<<stu[i]<<endl;
return 0;
}