希尔排序是插入排序的一种优化排序方法,希尔排序是对数组下标按照一定增量分组,对每组使用插入算法排序;循环执行该操作直到增量不小于0,排序完成。
// 这个是 n/2 n/2/2 …… 1
function hillSort(arr){
var len = arr.length;
var gap = 1;
while(gap < len / 2){
gap = gap * 2 + 1;
}
// 循环分组
for(var gap; gap > 0; gap = Math.floor(gap / 2)){
// 插入排序
for(var i = gap; i<len;i++){
var temp = arr[i];
for(var j = i - gap; j >= 0 && arr[j] > temp; j -= gap){
arr[j+gap] = arr[j];
}
arr[j+gap] = temp;
}
}
return arr;
}