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

关于插入排序算法中while循环内外变量j值的疑问

插入排序中变量j的修改值是否会保留

会保留修改后的值。

你在for循环内部用let j = i - 1声明的j,作用域覆盖当前for迭代的整个代码块,嵌套的while循环操作的是同一个变量。也就是说,while里执行j--修改的就是这个j,当while循环结束后,j的最新值会一直保留到当前for迭代结束,下一次for迭代会重新声明一个新的j变量。

举个具体的例子:你提到的第二次迭代(i=2,初始j=1),进入while循环执行j--后,j变为0,这个值会在while循环结束后继续存在,直到当前for迭代完成。


补充:你的插入排序代码存在逻辑错误,无法完成正确排序(比如测试数组中的-2无法被移动到正确位置)。正确的插入排序写法可以参考下面的逻辑:

function insertionSort(array) {
    for (let i = 1; i < array.length; i++) {
        let current = array[i];
        let j = i - 1;
        // 向前遍历,找到适合current插入的位置
        while (j >= 0 && array[j] > current) {
            array[j + 1] = array[j];
            j--;
        }
        array[j + 1] = current;
    }
    return array;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 00:25:28