34 lines
712 B
JavaScript
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)
|
|
}
|
|
|
|
}
|
|
|