algorighm/sort/shell-sort.mjs

34 lines
712 B
JavaScript

import { generateRandomArray, isSort } from "../util/index.mjs";
/**
*
* @param {number[]} arr
*/
export function shellSort(arr){
const n = arr.length
// 创建希尔序列,以克努特序列为例
let gap = 1;
while (gap < n / 3) {
gap = gap*3 +1
}
while(gap>=1) {
// 正常插入排序
for (let i = 0;i<gap; i++){
for(let j = i+gap;j < n;j+=gap){
let temp = arr[j]
while(j>0 && arr[j-gap] > temp) {
arr[j] = arr[j-gap]
j-=gap
}
arr[j] = temp
}
}
// 正常插入排序
gap = Math.floor(gap/3)
}
}