结构体排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #include <cstdio> #include <cstring> #include <cstdlib> int n,c; typedef struct{ char id[7]; char name[10]; int grade; }stu; stu s[100000]; int cmp1(const void *a1,const void *a2){ return strcmp(((stu *)a1)->id,((stu *)a2)->id); } int cmp2(const void *a1,const void *a2){ stu *p1=(stu *)a1, *p2=(stu *)a2; int t=strcmp(p1->name,p2->name); if(t==0) return strcmp(p1->id,p2->id); return t; } int cmp3(const void *a1,const void *a2){ stu *p1=(stu *)a1, *p2=(stu *)a2; int t=p1->grade-p2->grade; if(t==0) return strcmp(p1->id,p2->id); return t; } typedef int (*func)(const void *a1,const void *a2); func cmp[4]={NULL,cmp1,cmp2,cmp3}; int main(){ scanf("%d%d",&n,&c); for(int i=0;i<n;i++) scanf("%s %s %d",s[i].id,s[i].name,&s[i].grade); qsort(s,n,sizeof(stu),cmp[c]); for(int i=0;i<n;i++) printf("%s %s %d\n",s[i].id,s[i].name,s[i].grade); return 0; } |