使用 JavaScript 实现高效的希尔排序算法

21 min read

以下是使用 JavaScript 实现希尔排序的代码:

function shellSort(arr) {
  let n = arr.length;
  let gap = Math.floor(n / 2);

  while (gap > 0) {
    for (let i = gap; i < n; i++) {
      let temp = arr[i];
      let j = i;

      while (j >= gap && arr[j - gap] > temp) {
        arr[j] = arr[j - gap];
        j -= gap;
      }

      arr[j] = temp;
    }

    gap = Math.floor(gap / 2);
  }

  return arr;
}

使用方法如下:

let arr = [10, 5, 3, 8, 2, 6, 4, 7, 9, 1];
let sortedArr = shellSort(arr);
console.log(sortedArr); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

希尔排序是一个基于插入排序的快速排序算法,它通过将整个序列分成若干个子序列来进行排序。在每个子序列内部使用插入排序算法,当序列长度减少到一定程度时,插入排序的效率也会随之提高。最终通过排序子序列得到排序后的整个序列。