冒泡排序 - 具有结构数组的结构数组

时间:2012-11-02 23:55:02

标签: c++ sorting bubble-sort

如何使用冒泡排序(Student :: name上的students []的降序排序)对类的两个数组结构(其中一个数组是另一个结构的成员)具有相同的功能,并对类[]进行排序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);
  }
}

1 个答案:

答案 0 :(得分:2)

你真的没有2D学生阵容,这(总的来说)是一件好事。您需要应用两个单独的排序过程,它们可以非常独立地应用。

  1. 您需要遍历学生列表,对每个课程列表进行排序(每个学生一个)。目前尚不清楚你如何知道一个学生正在上多少课程,但这是你要解决的问题。您可以在其他排序操作之前或之后(但不在其中)执行此操作。如果感兴趣,它很容易并行化;你可以在N个主题中划分学生名单,为每个主题提供一组合适的学生。

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

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

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