0
qsortを使って構造体の配列をソートしようとしています。しかし、私はcompare関数の作り方を理解することに問題があります。私は次の構造体を持っています:構造体の配列を並べ替えるための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よりも小さく、実際にはRHSより小さく、あなたが望む順番でソートするはずです。 – WhozCraig