- 排序
#include<stdio.h>
#include<algorithm>
using namespace std;
bool cmp(int x,int y)//降序
{
return x>y;
}
int main()
{
int n;
int buf[100];
while(scanf("%d",&n) != EOF)
{
for(int i=0;i<n;i++)
{
scanf("%d",&buf[i]);
}
sort(buf,buf+n,cmp);//降序
//sort(buf,buf+n);//升序
for(int i=0;i<n;i++)
{
printf("%d ",buf[i]);
}
printf("\n");
}
return 0;
}
- 成绩排序
定义一个比较函数cmp的方法来实现
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
struct Student //学生类
{
char name[100];
int age;
int score;
}student[100];
bool cmp(Student s1,Student s2)
{
if(s1.score != s2.score)
return s1.score < s2.score;
int tmp=strcmp(s1.name,s2.name);
if(tmp!=0) return tmp<0;
if(s1.age!=s2.age) return s1.age<s2.age;
}
int main()
{
int n;
while(scanf("%d",&n) !=EOF)
{
for(int i=0;i<n;i++)
{
scanf("%s %d %d",&student[i].name,&student[i].age,&student[i].score);
}
sort(student,student+n,cmp);
for(int i=0;i<n;i++)
{
printf("%s %d %d\n",student[i].name,student[i].age,student[i].score);
}
printf("\n");
}
return 0;
}
直接定义结构体的小于运算符
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
struct Student
{
char name[100];
int age;
int score;
bool operator<(const Student &s) const //利用C++运算符重载直接定义小于运算符
{//括号中的const表示参数s对象不会被修改,最后的const表明调用函数对象不会被修改
if(score!=s.score) return score<s.score;
int temp = strcmp(name,s.name);
if(temp!=0) return temp<0;
if(age!=s.age) return age<s.age;
}
}student[100];
int main()
{
int n;
while(scanf("%d",&n) !=EOF)
{
for(int i=0;i<n;i++)
{
scanf("%s %d %d",&student[i].name,&student[i].age,&student[i].score);
}
sort(student,student+n);
for(int i=0;i<n;i++)
{
printf("%s %d %d\n",student[i].name,student[i].age,student[i].score);
}
printf("\n");
}
return 0;
}