时月oe 2019-12-09 17:46 采纳率: 50%
浏览 279
已采纳

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

图片说明

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

  • 写回答

1条回答 默认 最新

  • bobhuang 2019-12-09 18:24
    关注

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

    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]);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 12月28日

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器