题解 | 成绩排序
成绩排序
https://www.nowcoder.com/practice/3f27a0a5a59643a8abf0140b9a8cf1f7
#include <stdio.h> #include <stdlib.h> typedef struct{ int ID; int score; }Grade; void printGrade(Grade g); void sort(Grade*grade,int l,int r); void swap(Grade*a,Grade*b); int compare(Grade*a,Grade*b); int main() { int n; scanf("%d",&n); Grade*grade=(Grade*)malloc(n*sizeof(Grade)); for(int i=0;i<n;i++)scanf("%d %d",&grade[i].ID,&grade[i].score); sort(grade,0,n-1); for(int i=0;i<n;i++)printGrade(grade[i]); return 0; } void sort(Grade*grade,int l,int r){ if(l>=r) return; int i=l,j=r; Grade*pivot=grade+l; while(j>i){ while(i<=j&&!compare(grade+i,pivot)) i++; while(j>=i&&compare(grade+j,pivot)) j--; if(i<j) swap(grade+i,grade+j); } swap(pivot,grade+j); sort(grade,l,j-1); sort(grade,j+1,r); } void printGrade(Grade g){ printf("%d %d\n",g.ID,g.score); } void swap(Grade*a,Grade*b){ int tempID=a->ID; int tempScore=a->score; a->ID=b->ID;a->score=b->score; b->ID=tempID;b->score=tempScore; } int compare(Grade*a,Grade*b){ int result; if(a->score>b->score) result=1; else if(a->score<b->score) result=0; else if(a->ID>b->ID) result=1; else result=0; return result; }