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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:50:29