JavaScript实现Selection Sort(选择排序)代码出错,返回结果异常求助
选择排序代码错误排查与修复
你的代码存在三个关键问题,导致输出结果不符合预期:
1. 未声明局部变量smallest
在selectionSort函数中,smallest变量没有用let/const声明,会被自动提升为全局变量,可能引发不可预期的作用域冲突。
2. 错误使用pop()方法
Array.pop()方法不接受参数,它只会固定删除并返回数组的最后一个元素。要删除指定索引的元素,应该使用Array.splice(index, 1)——该方法返回包含被删除元素的数组,因此需要取返回值的第一个元素。
3. 循环条件逻辑错误
原循环用j < arr.length作为判断条件,但每次循环都会从arr中删除元素,导致arr.length持续减小,循环会提前终止(原本需要循环5次,实际只执行了3次)。正确的做法是先保存原数组的长度,基于这个固定值完成循环。
修复后的完整代码
function findSmallest(arr) { let smallest = arr[0]; let smallest_index = 0; for(let i=1; i<arr.length; i++) { if(arr[i] < smallest) { smallest = arr[i]; smallest_index = i; } } return smallest_index; } function selectionSort(arr) { let newArr = []; // 保存原数组长度,避免循环中长度变化影响执行次数 const originalLength = arr.length; for(let j=0; j<originalLength; j++) { // 声明局部变量 let smallest = findSmallest(arr); // 使用splice删除指定索引元素,并取出被删除的元素 newArr.push(arr.splice(smallest, 1)[0]); } return newArr; } console.log(selectionSort([5, 3, 6, 2, 10])); // 输出 [2, 3, 5, 6, 10]
内容的提问来源于stack exchange,提问作者Andrew Rusanov
相关产品推荐
相关产品推荐

