我有一个包含 id 和平均成绩的结构,我想对用户选择的数组进行排序,无论是按 id 还是按成绩
here is the struct
struct Stud {
int id;
float gradeAverage;
float incomeAverage;
int numOfGrades;
struct gradeList *gradelist;
struct incomeList *incomelist;
};
Students students[30];
i tried to use bubble sort but it didnt work any help please.
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
可读性:Student 处没有“s”,因为它代表一个学生。
关于c - 对泛型结构类型数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47596849/