【发布时间】:2016-11-30 18:46:48
【问题描述】:
我正在尝试使用 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 不,这是一个危险的快捷方式,可能会因整数溢出而出错。
-
@EliSadoff 如果您想使用良好的做法,请使用它,不要认为没关系。这不是一个好的建议。
-
问题是否可能是使用
sizeof(team)而不是sizeof(TEAM)? -
@EliSadoff 正要说同样的话。
标签: c arrays sorting struct qsort