0
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'는 부정적인 결과가 "덜"을 의미하고, 0은 등가를 의미하고, 긍정적은 "더 큰"을 의미한다고 예상합니다. 그리고 오름차순 * 순서로 정렬됩니다. 그래서 ... 더 큰 LHS가 실제로 더 큰 경우 RHS보다 "작다"라고 말하면 원하는 순서대로 정렬해야합니다. – WhozCraig