题解 | #成绩排序#
成绩排序
https://www.nowcoder.com/practice/8e400fd9905747e4acc2aeed7240978b
#include <stdio.h> #include <stdlib.h> /*快速排序法,并用index变量保持排序稳定性*/ typedef struct Student { int index; int score; char name[32]; } student; int inc(const void* a, const void* b) { int result = (**(student**)a).score - (**(student**)b).score; if(result==0) return (**(student**)a).index - (**(student**)b).index; else return result; } int dcr(const void* a, const void* b) { int result = (**(student**)b).score - (**(student**)a).score; if(result==0) return (**(student**)a).index - (**(student**)b).index; else return result; } int main() { int i, j, dir, nums; student** pStud, tempstud; scanf("%d", &nums); pStud = (student**)malloc(sizeof(student*)*nums); scanf("%d", &dir); for (i = 0; i < nums; i++) { pStud[i] = (student*)malloc(sizeof(student) * 1); scanf("%s %d", (pStud[i]->name), &(pStud[i]->score)); pStud[i]->index=i; } if(dir) qsort(pStud,nums,sizeof(student *),inc); else qsort(pStud,nums,sizeof(student *),dcr); for (i = 0; i < nums; i++) { printf("%s %d\r\n", pStud[i]->name, pStud[i]->score); } for(i=0;i<nums;i++) free(pStud[i]); free(pStud); return 0; }#成绩排序#