2012-11-02 81 views
1

如何使用冒泡排序对同一函数对两个数组的结构(其中一个数组是其他结构的成员)进行排序(学生[]的降序]对学生::名称和类别::标题类[]数组排序Bubble Sort - 具有结构数组的结构数组

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

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

在主:

Student students[SIZE]; 

我试图梳理结构,每个包含数组的数组结构也需要使用冒泡排序排序,我的排序功能粘贴在下面,它不能正确排序ra它会根据标题正确地对结构类[]的内部数组进行排序,并在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); 
    } 
} 
+0

我很可惜实际上需要500课的可怜的学生! –

+0

哈哈,我想尽快完成学业(每季5-6班)。因此,这是我的感受,当我编写此:) – Zzz

+0

考虑9年博士课程将采取(5classes /学期* 3terms /年*9年)将至多145班,我认真地想知道这个学生是什么学习,以及他们需要赢得多少彩票才能还清学生贷款。 – WhozCraig

回答

2

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

  1. 您需要循环访问您的学生列表,并对每个班级列表(每个学生一个)进行排序。目前还不清楚你如何知道一个学生正在接受多少班,但这是你需要解决的问题。您可以在其他排序操作之前或之后(但不能在其他排序操作中)执行此操作。如果感兴趣的话,它是很容易并行的;您可以将学生列表分为N个线程,为每个线程提供一组合适的学生。

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

您将需要两个独立的排序功能 - 或者,如果你借了标准C函数qsort()的设计,你将两个独立的比较功能和单一的排序算法。

所以,不要试图将两种类型的操作结合起来。分开做。

+1

分离分拣过程将使生活轻松了许多,遗憾的是这是一个任务,它需要进行排序的一个函数来完成。 – Zzz

+1

说的任务是愚蠢的!什么算作一个功能? (void * sort_this(Student * s,size_t n){for(size_t i = 0; i