【问题标题】:Why are my vector functions not sorting data like they're supposed to?为什么我的向量函数没有像他们应该的那样对数据进行排序?
【发布时间】:2023-03-04 11:36:01
【问题描述】:

该代码旨在输出学生名单,并启用按名字、姓氏、年级等对表格进行排序。

我的程序编译成功了,我实际上在最初的几个问题上得到了认可,但是我的 SortByFirstName 和 SortByLastName 函数,或者这些函数与 SortByGrade 交互的方式似乎有问题。 (这些函数在代码的底部,其他一切都应该可以正常工作)

当尝试按姓氏或名字排序时,输出结果几乎正确,也就是说,列表似乎已正确排序,但其中两个中间名未排序。成绩值也被不正确地交换(或根本没有交换?)。

当只是按年级排序时似乎没有问题,所以我假设错误在于 SortByFirstName 和 SortByLastName 函数。

这是我当前代码的示例错误输出(针对 SortByFirstName):

预期:| |找到:

  • Alyx 马西纳斯 | |爱丽克斯马西纳斯
  • 吉妮麦克唐纳 | |诺拉·曼农
  • 诺拉·曼农 | |吉妮·麦克唐纳
  • 兰迪·鲁宾 | |兰迪·鲁宾
  • 丝芙兰麦当劳 | |丝芙兰麦当劳

这是另一个(对于 SortByFirstName + SortByGrade):

预期:| |找到:

  • Alyx 马西纳斯 | |爱丽克斯马西纳斯
  • 吉妮麦克唐纳 | |诺拉·曼农
  • 诺拉·曼农 | |吉妮·麦克唐纳
  • 兰迪·鲁宾 | |兰迪·鲁宾
  • 丝芙兰麦当劳 | |丝芙兰麦当劳

预期:| |找到:

  • 83.5 | | 83.5
  • 98.7 | | 100
  • 100 | | 98.7
  • 89.5 | | 89.5
  • 100 | | 100

为什么我的函数没有正确排序?终于把它全部编译好后,我不知道该去哪里。我一直在我的笔记中寻找类似的实践问题,其中在函数调用期间没有完全选择向量。任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 注意std::swap的存在
  • 调试器告诉你你的代码在做什么?
  • 你不能用std::sort吗?
  • 这里有一些关于@JHBonarius 评论的附加信息:stackoverflow.com/questions/25385173/…stackoverflow.com/questions/12546706/…
  • 第一组菜单选项工作正常。当尝试按名字对列表进行排序时,例如,在 5 个名字中,第二个和第三个名字没有正确交换。当按名字和等级排序时,同样的错误很明显,列表中的第 2 和第 3 名字/等级排序不正确(应该切换)。

标签: c++ function sorting vector selection


【解决方案1】:

在您的排序函数的内部循环中,您没有考虑到当您交换两个学生时(例如,当firstName2 移动到以前由firstName1 占用的位置时)您现在需要将后续元素与最小已知条目(在本例中为firstName2)。

添加一行:

if (firstName1 > firstName2) {
    temp = students[i];
    students[i] = students[j];
    students[j] = temp;
    tempGrade = grades[i];
    grades[i] = grades[j];
    grades[j] = tempGrade;

    // now only look for items that should come before our new "leader"
    firstName1 = firstName2;
}

【讨论】:

    猜你喜欢
    • 2011-09-25
    • 2021-01-13
    • 2022-01-01
    • 1970-01-01
    • 2017-06-21
    • 2020-08-14
    • 1970-01-01
    • 2022-12-05
    • 2020-08-15
    相关资源
    最近更新 更多