希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。希尔排序适合数据量中等情况,几十个到几万个。
网上看了好久才彻底明白希尔排序是什么,简单的说将就是按照步进对数据进行分组,对每组分别进行插入排序,直到步进是1的时候则全部完成。在此感谢 dreamcatcher-cx的博客 的讲解。
function sortShell(arr){
let gap, i, j;
let tmp;
// 增量gap,并逐步缩小增量
for (gap = arr.length>>1; gap>0; gap>>=1){
//从第gap个元素,逐个对其所在组进行直接插入排序操作
for (i = gap; i < arr.length; i++){
tmp = arr[i];
for (j = i - gap; j>=0 && arr[j] > tmp; j-=gap){
arr[j+gap] = arr[j];
}
arr[j+gap] = tmp;
}
}
}