c++ - 冒泡排序 - 结构数组与结构数组

标签 c++ sorting bubble-sort

如何使用冒泡排序对两个结构数组(其中一个数组是另一个结构的成员)进行排序Class::title 上的数组?

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

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

主要内容:

Student students[SIZE];

我正在尝试对结构数组进行排序,每个结构都包含一个结构数组,这些结构也需要使用冒泡排序进行排序。我的排序功能粘贴在下面。它没有正确排序,而是根据标题正确排序结构 classes[] 的内部数组,并在 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);
  }
}

最佳答案

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

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

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

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

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

关于c++ - 冒泡排序 - 结构数组与结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13204619/

相关文章:

c++ - 获取 C99 可变参数函数的参数类型

c++ - 指定索引范围

c++ - 如何从一个函数返回多个类型?

algorithm - 可执行文件中包含的排序算法是否被信号 11 命令终止?

python - py3k : case-insensitive list sorting - With or WIthout lambda?

java - 用于计算未正确输出的算法的比较和执行时间的代码

c++ - 将双向链表与 C++ 中的 Stack 和 Queue 类链接起来

c - 查找重复的数字并首先打印出最重复的数字,然后打印出其余的数字

c - 交换函数 c

list - 每次通过冒泡排序时,我如何打印出列表的状态?