0

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

1 回答 1

0

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

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;
};
于 2021-02-27T18:58:17.697 回答