关于插入排序算法中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
相关产品推荐
相关产品推荐

