在我的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;
};