这是关于一道复试筛选的问题

图片说明

求助大神,在这道题目中,需要三个属性进行排序,首先是总成绩,然后是英语,最后是学号,我写的代码中用到了三次冒泡排序,感觉这样效率很低,请问有没有什么,快速的方法实现对这三种属性的排序呢?(我的意思不是冒泡排序太慢,而是想了解一种快速对多种属性排序的方法)

方法一:
写一个自定义的比较函数,输入两个学生信息,输出大于、小于、等于。在比较函数中实现题设的比较逻辑。
比如:

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]);