04_希尔排序

希尔排序的基本思想是把数组按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的元 素越来越多,当增量减至 1 时,整个数组恰被分成一组,算法便终止。

希尔排序的平均时间复杂度为 O(nlogn) ,最坏时间复杂度为 O(n^s) ,空间复杂度为 O(1) ,不是稳定排序。

点击查看代码
function shellSort(arr) {
  if (!Array.isArray(arr) || arr.length <= 1) return arr;

  const length = arr.length - 1;
  let gap = Math.floor(arr.length / 2);

  while (gap >= 1) {
    for (let i = gap; i <= length; i++) {
      let j = i,
        temp = arr[i];

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

      arr[j] = temp;
    }
    gap = Math.floor(gap / 2);
  }

  return arr;
}
Last Updated:
Contributors: hqchqc