#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
//按照 分数 降序(大到小)
// 做出题目数 降序(大到小)
// 耗时 升序(小到大)
// 姓名 字典序(升序)(小到大)
//排序
typedef struct aaa{
char name[20];//名字
int s,cnt,t;//分数 做出题目数 耗时
}student;
/*
strcmp(str1,str2)
若str1==str2,则返回零;
若str1<str2, 则返回负数;
若str1>str2, 则返回正数;
*//*
< 是升序(小到大)(左面小右面大)
> 是降序
*/
//返回类型bool也可以
int cmp1(student a,student b){
if(a.s != b.s) return a.s > b.s; //分数 降序(大到小)
if(a.cnt != b.cnt) return a.cnt > b.cnt; //做出题目数 降序(大到小)
if(a.t != b.t) return a.t < b.t; //耗时 升序(小到大)
else return strcmp(a.name,b.name)<0; //姓名 字典序(升序)(小到大)
//else可以去掉
}
/*
//sort与qsort相反
前-后(第1个数减第2个数) 是升序
后-前 是降序
*/
int cmp2(const void* a, const void* b){
student *pa=(student*)a,*pb=(student*)b;
int s1=pa->s,s2=pb->s;
if(s1!=s2) return s2-s1; //分数 降序(大到小)
if(pa->cnt!=pb->cnt)return pb->cnt-pa->cnt; //做出题目数 降序(大到小)
if(pa->t!=pb->t) return pa->t-pb->t; //耗时 升序(小到大)
return strcmp(pa->name,pb->name); //姓名 字典序(升序)(小到大)
}
int main(){
student x[15];
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++)scanf("%s %d %d %d",&x[i].name,&x[i].s,&x[i].cnt,&x[i].t);
//二选一_______________________________
//sort(x,x+n,cmp1);
qsort(x,n,sizeof(student),cmp2);
cout<<endl;
for(i=0;i<n;i++)
cout<<x[i].name<<' '<<x[i].s<<' '<<x[i].cnt<<' '<<x[i].t<<endl;
return 0;
}
/*数据
15
aaa 50 4 77
abc 60 2 30
bbb 80 8 15
kdhj 12 9 2
sso 80 8 21
six 100 20 60
ssd 0 0 0
wzx 9999 999 1
lld 50 3 52
ten 80 7 99
eleven 80 7 3
dfh 80 7 3
ujk 55 5 5
yhj 33 65 41
fifteen 60 2 30
*/
/*结果
wzx 9999 999 1
six 100 20 60
bbb 80 8 15
sso 80 8 21
dfh 80 7 3
eleven 80 7 3
ten 80 7 99
abc 60 2 30
fifteen 60 2 30
ujk 55 5 5
aaa 50 4 77
lld 50 3 52
yhj 33 65 41
kdhj 12 9 2
ssd 0 0 0
*/
结构体排序 sort与qsort
最新推荐文章于 2024-07-24 22:13:06 发布