我在javascript中使用了一个表达式来递减for循环,它不起作用



在我的shell排序代码中,我使用了一个表达式来递减第一个for循环,它似乎不工作,这就是为什么我的循环无限运行,有人能解释为什么递减表达式不工作吗?下面是代码.....

const shellSort = function (arr) {
let gap;
for (gap = Math.floor(arr.length / 2); gap >= 1; Math.floor(gap / 2)) {
for (let j = gap; j < n; j++) {
for (let i = j - gap; i >= 0; i - gap) {
if (arr[i + gap] > arr[i]) break;
else [arr[i], arr[i + gap]] = [arr[i + gap], arr[i]];
}
}
}
return arr;
};

两个循环步骤都不正确,你不能只使用

Math.floor(gap / 2)

因为你的意思是

gap = Math.floor(gap / 2)

同样适用于i环。

同样,n在这里是未定义的。

你的代码已更正

var shellSort = function (arr) {
let gap;
for (gap = Math.floor(arr.length / 2); gap >= 1; gap = Math.floor(gap / 2)) {
for (let j = gap; j < arr.length; j++) {
for (let i = j - gap; i >= 0; i = i - gap) {
if (arr[i + gap] > arr[i]) break;
else [arr[i], arr[i + gap]] = [arr[i + gap], arr[i]];
}
}
}
return arr;
};

最新更新