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

为何两种按字符数排序字符串数组的方法测试表现不同?

两种数组排序实现的差异及问题原因

你的代码和Array.sort()的实现主要有两个核心差异,也是导致测试不通过的关键原因:

1. 变量未声明导致的执行错误

你的排序代码中,temp变量没有使用var/let/const声明:

temp = ordering[i]; 
ordering[i] = ordering[j];  
ordering[j] = temp; 

如果测试环境启用了严格模式("use strict"),这种未声明变量的赋值会直接抛出ReferenceError,导致代码执行失败。而sort的实现没有这个问题,因此能正常运行。

2. 排序稳定性的差异

  • 你的实现是选择排序,属于不稳定排序算法:当两个元素长度相同时,若后续操作涉及交换其他元素,可能会破坏原数组中相同长度元素的相对位置。比如原数组为["b", "a", "z"](三者长度均为1),若插入一个长度为0的元素"",你的代码会将""交换到首位,最终得到["", "a", "z", "b"]——原数组中b在a前面,排序后相对顺序被反转。
  • 现代浏览器(包括Edge)中的Array.sort()采用稳定排序算法(如Timsort或插入排序):当比较函数返回0时(即两个元素长度相等),会严格保留它们在原数组中的相对顺序。如果测试用例要求必须保持相同长度元素的原顺序,你的选择排序就不符合要求,而sort的实现则能满足。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:24:54