【发布时间】:2020-07-19 11:10:11
【问题描述】:
我能问一下双重排序是如何工作的吗?
我只想按票数比较两个人(例如 10 JAMES 和 8 Jack)应该看起来像 10 詹姆斯 8 杰克
我使用 qsort 使这成为可能,但如果我想按 alpha 顺序(例如 10 JAMES、8 JACK、10 ALEXA)对具有相同票数的人进行排序应该看起来像 10 亚历克萨 10 詹姆斯 8 杰克
我的比较函数看起来像:
int compare(const void* p1, const void* p2){
return ( ((const struct student*) p2)->votes - ((const struct student*) p1)->votes );
int value = (((const struct student*)p2)->name - ((const struct student*)p1)->name);
if(value==0)
{
return stcrmp(((const struct student*) p1)->name - ((const struct student*) p2)->name);
}
}
然后在那里进行 qsort
qsort ((void*) databaza, size, sizeof(struct student), compare);
但它不起作用,谁能解释为什么? 非常感谢!
【问题讨论】:
-
您的比较函数在查看
name之前正在执行return语句。该函数的其余部分也是错误的。为什么它减去name指针,然后只在指针值的差异为 0 时才比较名称?
标签: c sorting pointers struct qsort