编写的Insertion Sort代码结果不正确,请求技术排查
插入排序代码问题排查
你的插入排序代码出现错误的核心原因是while循环的条件判断存在疏漏。
问题根源
原代码中while循环的条件为:
while(i > 0 && Array[i] > key)
这里的i > 0会导致程序跳过对数组第0位元素的比较。当i递减到0时,循环直接终止,无法将当前key与数组第一个元素进行对比和交换,这就像示例中的26,明明比第一个元素31小,却无法被放到正确的起始位置。
修正后的代码
let arr = [31, 41, 59, 26, 41, 58]; let len = arr.length; for (let j = 1; j < len; j++) { let key = arr[j]; let i = j - 1; // 将 i > 0 改为 i >= 0,确保比较覆盖数组第一个元素 while (i >= 0 && arr[i] > key) { arr[i + 1] = arr[i]; i = i - 1; } arr[i + 1] = key; } console.log(arr); // 输出:[26, 31, 41, 41, 58, 59]
额外建议
- 不要用
Array作为变量名,它是JavaScript的内置构造函数,容易引发命名冲突,改用arr这类更安全的名称。 - 修正后的
i >= 0条件,会让程序从当前元素的前一位开始,一直向前对比到数组的第一个元素,确保所有比key大的元素都被后移,最终将key插入到正确位置。
内容的提问来源于stack exchange,提问作者Noumi
相关产品推荐
相关产品推荐

