JS实现希尔排序的一种方法

113 阅读1分钟

希尔排序其实就是对插入排序的优化。

首先插入排序要想效率高,需要两个前提条件:元素少、基本有序。

希尔排序就是利用这点。所以对原数组进行增量分组,然后对每个组进行插入排序。


/**
 *
 * @param {*} arr
 * 希尔排序
 */
function shellSort(arr) {
  let len = arr.length,
    temp,
    gap = 1;
  while (gap < len / 3) {
    //动态定义间隔序列
    gap = gap * 3 + 1;
  }
  for (gap; gap > 0; gap = Math.floor(gap / 3)) {
    for (let i = gap; i < len; i++) {
      temp = arr[i];
      let j = i - gap;
      for (; j >= 0 && arr[j] > temp; j -= gap) {
        arr[j + gap] = arr[j];
      }
      arr[j + gap] = temp;
      console.log('arr  :', arr);
    }
  }
};

希尔排序的代码实现是有点不好理解的,暂时没想到这个算法的应用场景