参考文章
http://www.cnblogs.com/hapjin/p/5538411.html
http://www.cnblogs.com/jingmoxukong/p/4303279.html
希尔排序就是一个特殊形式的插入排序,插入排序是前面的都是有序的,轮到你的时候,你看到前面哪个比你大,你就再往前看,一直看到比你小的那个,然后吧唧插在这个后面,那些比你大的都往后站
希尔排序是这样,比如我有100个数,那我假设取一个5作为步长(听说比较好的步长序列是1, 5, 19, 41…),那我选出来的数的序号是[1,6,11,16…],然后对这批数做一个插入排序,然后再换一个步长,一般肯定选一个更小的步长咯,再来一次,然后一直到步长为1,完成
function shellsort(arr, gap) {
for (var gap_t = gap; gap_t >= 1; gap_t = Math.floor(gap_t / 2)) {//更新gap
for (var i = gap_t; i < arr.length; i++) {//这里要注意,是i++不是i+gap_t没错
var tmp = arr[i];
for (var j = i; j >= gap_t && tmp > arr[j - gap_t]; j = j - gap_t) {
arr[j] = arr[j - gap_t]; //后移
}
arr[j] = tmp; //找到位置插入
}
console.log(arr);
}
}
shellsort([81,94,11,96,12,35,17,95,28,58,41,75,15],2);