算法笔记系列:希尔排序
实现原理:首先将数据按元素下标值的一定增量进行分组,并使用插入排序算法对每组数据排序,之后将其增量减小,如此往复至增量减为 1 时(完成当次排序),算法终止。
过程图示
第1轮分组,增量为 4(n / 2)
最后一轮,增量为 1
图片来源 https://www.runoob.com/
示例代码
function shellSort(arr) {
var len = arr.length,
// 每组元素的间隔
sp = Math.floor(len / 2);
while (sp >= 1) {
for (var i = sp; i < len; i ++) {
var curr = arr[i];
for (var j = i; j - sp >= 0 && curr < arr[j - sp]; j -= sp) {
arr[j] = arr[j - sp];
}
arr[j] = curr;
}
sp = Math.floor(sp / 2);
}
}