You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用qsort()实现稳定排序遇OJ WA错误,求排查思路

排查你的qsort稳定排序WA问题

首先,你的代码里有一个非常关键的未定义行为,这大概率是导致在线判题返回WA的核心原因:

你的compar函数在A->order == B->order的情况下没有返回值!C语言要求非void类型的函数必须有明确的返回值,当两个元素的成绩和order都相等时,你的函数没有任何return语句,这会导致qsort在比较这类元素时得到随机的返回值,进而破坏整个排序结果的正确性。

修正后的compar函数

你需要在函数末尾加上return 0;,处理两个元素完全相等的情况:

int compar(const void *a, const void *b){
    People *A = (People*)a;
    People *B = (People*)b;
    if(A->grade > B->grade) return 1;
    else if(A->grade < B->grade) return -1;
    else if(A->order > B->order) return 1;
    else if(A->order < B->order) return -1;
    return 0; // 必须加上这一行!
}

其他可能的排查方向

如果修正后还是WA,可以检查以下几点:

  • 排序顺序是否符合题目要求:确认题目是要求成绩升序还是降序。你的代码实现的是成绩升序(成绩小的在前),如果题目要求降序,需要把成绩比较的返回值反转(比如A->grade > B->grade返回-1,A->grade < B->grade返回1)。
  • 输入输出的格式问题:比如姓名是否可能包含空格?如果题目里的姓名是单单词,你的scanf("%s %d")没问题,但如果姓名有空格,就需要用fgets或者其他方式读取(不过这类OJ题目通常姓名都是无空格的)。
  • 内存泄漏:虽然这个不会导致WA,但你的代码里new People[n]后没有delete[] p;,养成手动释放内存的好习惯会更规范。

先试试修正compar函数的返回值问题,这应该是最可能解决你当前问题的方案。

内容的提问来源于stack exchange,提问作者Patricius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:32:30