C-对结构类型阵列进行排序



我有一个结构,其中包含ID和等级的平均值,我想对用户选择的数组进行对数组进行分类,而

这是struct

struct Stud {
    int id;
    float gradeAverage;
    float incomeAverage;
    int numOfGrades;
    struct gradeList *gradelist;
    struct incomeList *incomelist;
};
Students students[30];

我试图使用泡泡排序,但没有任何帮助。

void Sort(void* array,int i, int len, int(*comp)(void *a, void *b), void(*swap)(void *a, void *b))
{
    int newlen;
    while (len != 0) {
        newlen = 0;
        for (int i = 1; i < len; i++) {
            if (!comp(array +i- 1, array + i)) {
                swap(array + i - 1, array + i);
                newlen = i;
            }
        }
        len = newlen;
    }
}

使用 qsort()

使比较功能

int comp(const void *a, const void *b) {
   Student *sa = a;
   Student *sb = b;
   if (BY_ID) return sa->id - sb->id;
   // otherwise, by num of grades
   return sa->numOfGrades - sb->numOfGrades;
}

致电qsort

#define N 30
qsort(students, N, sizeof(Student), comp);

该结构也需要一些修复,例如

typedef struct Stud {
        int id;
        float gradeAverage;
        float incomeAverage;
        int numOfGrades;
        struct gradeList *gradelist;
        struct incomeList *incomelist;
} Student;
Student students[N];  // see #define above

可读性:no's'在学生中,因为它代表一个 student。

最新更新