求助大神,在这道题目中,需要三个属性进行排序,首先是总成绩,然后是英语,最后是学号,我写的代码中用到了三次冒泡排序,感觉这样效率很低,请问有没有什么,快速的方法实现对这三种属性的排序呢?(我的意思不是冒泡排序太慢,而是想了解一种快速对多种属性排序的方法)
方法一:
写一个自定义的比较函数,输入两个学生信息,输出大于、小于、等于。在比较函数中实现题设的比较逻辑。
比如:
int cmp(Student *a, Student *b)
{
if (a->total > b->total) {
return 1;
} else if (a->total < b->total) {
return -1;
} else {
if (a->english > b->english) {
return 1;
} else if (a->english < b->english) {
return -1;
} else {
if (a->kaohao > b->kaohao) {
return -1;
} else {
return 1;
}
}
}
}
方法二:
按题设将三个属性转换成一个属性,再进行排序。
比如:
student.score = (student.total * 1000 + student.english) * 100000000 + atoi(&student.xuehao[2]);