改写c++自带sort排序函数实例解析
c++算法库自带sort排序,这是一种高效的桶排序,效率很高,调用也很方便,大家要记得加上算法库头文件#include<algorithm>
sort函数是由小到大的排序,做题时如果遇到由大到小的排序或结构体排序,就需要自己写cmp函数,下面根据几个实例介绍一下改写方法
1.由大到小排序,需要自己定义一个cmp函数
#include<bits/stdc++.h>
using namespace std;
//由大到小排序,需要自己改写cmp函数
int cmp(int a,int b)
{
return a>b;
}
int main()
{
int i,n;
int stu[10];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&stu[i]);
sort(stu,stu+n,cmp);
for(i=0;i<n;i++)
cout<<stu[i]<<" ";
}
样例输出由大到小排序结果
2.这道题是我在查阅资料时遇到的,题后附的代码编译错误,我修改了一下
题目:每当考试结束,老师总要对学生的成绩进行排序,以便研究学生学习情况。老师发现学生数目庞大,所以找来了会编程的你,并且它给你了全部同学的分数,希望你能按如下规则排序:1.分数高的排在前面;2.如果分数相同,就把名字字典序低的放在前面
#include<bits/stdc++.h>
//由大到小排序,如果成绩相同,按姓名字典排序
using namespace std;
struct node
{
int score;
char name[10];
}stu[3000];
int cmp(node x,node y)
{
if(x.score!=y.score)
return x.score>y.score;
if(strcmp(x.name,y.name)!=0)
return strcmp(x.name,y.name)<0;
}
int main()
{
int i,j,n,m;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s %d",&stu[i].name,&stu[i].score);
sort(stu,stu+n,cmp);
for(i=0;i<n;i++)
printf("%s %d\n",stu[i].name,stu[i].score);
return 0;
}
输入样例:
5
Xiaoxiao 399
Yingmo 405
Diyucailang 399
Xiaobu 399
xiao 399
输出样例:
Yingmo 405
Diyucailang 399
Xiaobu 399
Xiaoxiao 399
xiao 399