时月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日

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?