vlambda博客
学习文章列表

算法笔记系列:希尔排序

希尔排序
希尔排序是直接插入排序的高效改进版,它是一种非稳定的排序算法

:首先将数据按元素下标值的一定增量进行分组,并使用插入排序算法对每组数据排序,之后将其增量减小,如此往复至增量减为 1 时(完成当次排序),算法终止。

过程图示

第1轮分组,增量为 4(n / 2)

第2轮分组,增量为 2 (n / 2 / 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); }}