Я пытаюсь сортировать массив структур с qsort. Однако у меня возникают проблемы с пониманием того, как сделать функцию сравнения. У меня есть следующая структура:Qsort для сортировки массива структур
typedef struct {
char name[TEAM_SIZE];
int points;
} TEAM;
И я стараюсь сортировать каждую команду после ее пунктов с наивысшим приоритетом.
qsort(team, NUMBER_OF_TEAMS, sizeof(team), compare_points);
И функция сравнения:
int compare_points(const void *a, const void *b) {
TEAM *p1 = (TEAM *)a;
TEAM *p2 = (TEAM *)b;
if(p1->points < p2->points) {
return 1;
}
else {
return -1;
}
}
Как бы вы это сделали?
Выход:
Before:FCN 38
Before:FCM 59
Before:OB 46
Before:AGF 37
Before:AAB 50
Before:FCK 71
Before:HOB 18
Before:SDR 62
Before:RFC 47
Before:BIF 54
Before:EFB 30
Before:VFF 40
After:FCM 59
After 8
After:OB 46
After:AGF 37
After:AAB 50
After:FCK 71
After:HOB 18
After:SDR 62
After:RFC 47
After:BIF 54
After:EFB 30
After:VFF 40
Что не работает? –
@EliSadoff Он просто не сортирует его так, как должно. Добавление вывода, чтобы вы могли видеть. – asdasd
Fyi, если вы хотите более крупную сортировку, вам нужно отменить логику в компараторе. 'qsort' ожидает, что отрицательный результат будет означать« меньше », от нуля до средней эквивалентности, а положительный означает« больше ». И он сортируется по * восходящему * порядку. Итак ... скажите, что большая LHS «меньше», чем RHS, когда она на самом деле больше и наоборот, и она должна сортироваться в том порядке, в котором вы хотите. – WhozCraig