题解 | #成绩排序#
成绩排序
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;
}
#成绩排序#
查看7道真题和解析