gpt4 book ai didi

javascript - 为什么在循环中使用变量和直接调用索引之间存在差异?

转载 作者:行者123 更新时间:2023-11-29 23:00:54 25 4
gpt4 key购买 nike

我正在研究插入排序,我注意到我的代码只有在我使用变量 (num) 与 myArray[j] 的值进行比较时才有效。

我很困惑为什么 myarray[i] 不起作用,因为 num 被设置为 myarray[i] 的值并且因为 myarray[j] 嵌套在循环内部,所以 i 的值不会改变。那么为什么只有当我使用 (num) 作为比较时该方法才能正常工作?

const myArray = [3,1,4,8,2,7,3,23,43,21,46,23,30,49,50,12,44,233,492,32];

const insertionSort = (myArray) => {
for (let i = 1;i<myArray.length;i++){
let num = myArray[i];
j = i-1
while (j>=0 && myArray[j]>num){
myArray[j+1] = myArray[j]
j--
}
myArray[j+1] = num
}
}

// correctly outputs [ 1, 2, 3, 3, 4, 7, 8, 12, 21, 23, 23, 30, 32, 43, 44, 46, 49, 50, 233, 492 ]



const insertionSort = (myArray) => {
for (let i = 1;i<myArray.length;i++){
let num = myArray[i];
j = i-1
while (j>=0 && myArray[j]>myArray[i]){
myArray[j+1] = myArray[j]
j--
}
myArray[j+1] = num
}
}

// incorrectly outputs [ 1, 3, 4, 2, 7, 3, 8, 23, 21, 43, 23, 30, 46, 49, 12, 44, 50, 233, 32, 492 ]

最佳答案

给定这个简单的数组,假设我们使用的是无效算法:

 //    i
[2, 3, 1]
// j

您将从 i = 1num = 3 开始插入排序。 array[i]开头也是3。现在由于array[j] (2)小于3,我们将在下一个索引处继续排序。

 //       i
[2, 3, 1]
// j

现在 i = 2num1array[i]1 太(还)。由于 array[i] (1) 较小 array[j] (3),右移发生:

 //       i
// >>>
[2, 3, 3]
// j

循环现在应该继续到 j = 0,因为必须在 23 之前插入 1 ,如果我们可以将 num (1)array[j] (2) 进行比较,则内部循环将继续,但是当您使用 array[i] ( 3),循环停止:

  //       i
[2, 3, 3]
// j

比插入发生在错误的位置:

 //    v
[2, 1, 3]

关于javascript - 为什么在循环中使用变量和直接调用索引之间存在差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55683916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com