【问题标题】:Bubble Sort - Array of structs with an array of structs冒泡排序 - 结构数组和结构数组
【发布时间】:2012-11-02 23:55:02
【问题描述】:

如何使用冒泡排序(Student::name 上的 student[] 降序排序并排序 classes[] Class::title 上的数组?

struct Class
{
    string title; 
    int units;
    char grade;

};
struct Student
{
    string name;
    double gpa;
    Class classes[500];
};

主要:

Student students[SIZE];

我正在尝试对一个结构数组进行排序,每个结构都包含一个结构数组,这些结构也需要使用冒泡排序进行排序。我的排序功能粘贴在下面。它没有正确排序,而是根据标题正确地对结构类 [] 的内部数组进行排序,并在 for 循环的第一次迭代中正确地对外部数组 st[] 进行排序。由于在第二次迭代中 st[] 的元素已被交换,因此第一个元素未排序 b/c currentStu 现在设置为数组中的第二个元素。

void sort_name(Student st[], int numValues)
{
  int currentStu = 0;
  int currentClass = 0;

  for(currentStu = 0; currentStu < numValues; currentStu++)
  {
        for(currentClass = 0; st[currentStu].classes[currentClass].title != ""; currentClass++)
        {
            bubbleUpClass(st, currentClass, currentStu);
        }

        bubbleUpLastName(st, currentStu, numValues - 1);
  }
}

【问题讨论】:

  • 可怜这个穷学生居然上了500节课!
  • 大声笑,我正在努力尽快完成学业(每季度 5-6 节课)。这就是我在编写代码时的感受 :)
  • 考虑到一个 9 年的博士课程需要 (5classes/term * 3terms/year * 9years) 最多 145 个课程,我很想知道这个学生在学习什么,以及有多大他们需要赢的彩票才能偿还学生贷款。
  • @JonathanLeffler 谢谢;我今天一直盯着代码方式太久了。 135 类。 (*别告诉我我也吃过那个;)
  • 除非你的bubbleUpStudent的算法有漏洞,否则应该在students的槽[0]中的学生应该在你第一次通过后回家;在两次通过后的 slot[0..1] 中,等等。您的气泡功能是否将项目推到桌子的 end ?如果是这样,它可能是倒退的。您的调用也可能是bubbleUpLastName(st, currentStu, numValues - currentStu);

标签: c++ sorting bubble-sort


【解决方案1】:

您并没有真正的二维学生数组,这(总体上)是一件好事。您需要应用两个单独的排序过程,它们可以完全独立地应用。

  1. 您需要遍历学生列表,对每个班级列表进行排序(每个学生一个)。目前尚不清楚您如何知道给定学生上多少门课,但这是您需要解决的问题。您可以在其他排序操作之前或之后(但不能在期间)执行此操作。如果感兴趣,它很容易并行化;您可以将学生列表划分为 N 个线程,为每个线程分配一组合适的学生来处理。

  2. 您需要对整个学生列表进行排序。此操作将影响整个学生数组(或至少影响其中填充的部分)。您将在其他排序操作之前或之后(但不是期间)执行此排序。

您将需要两个单独的排序函数 — 或者,如果您借用标准 C 函数 qsort() 的设计,您将需要两个单独的比较器函数和一个排序算法。

所以,不要尝试将这两种排序操作结合起来。分开做。

【讨论】:

  • 分离排序过程会让生活更轻松,不幸的是这是一项任务,它需要在一个函数中完成排序。
  • 说作业很蠢!什么算作一项功能? void sort_this(Student *s, size_t n) { for (size_t i = 0; i &lt; n; i++) sort_class(s[i]); for (size_t i = 0; i &lt; n-1; i++) { ...sort s... } }?哪里可以在函数中写上标记为sort_class() inline 的排序算法?如果你必须在一个函数中完成它,那么你可以,但你应该编写正确设计的解决方案,然后将其删除,使其符合任务的要求。
猜你喜欢
  • 2017-01-24
  • 1970-01-01
  • 2019-11-29
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-11
相关资源
最近更新 更多