希尔排序
louzhedong opened this issue · 0 comments
louzhedong commented
算法名称
希尔排序
实现思路
- 是插入排序的一个优化,插入排序可以看作增量为1的希尔排序
- 插入排序的特点是数组有序程度越高越高效,数组量越小效率越高
- 希尔排序是将较大的数据集合拆分成若干个小组,每个小组进行排序。对于每个小组来说,数据量较少,效率较高
- 增量在每一轮结束后缩小为原来的一半,数组量变多,但数据也更加有序
算法分析
时间复杂度根据不同增量有所不同,最大的时间复杂度为O(n^2)
算法实现
function ShellSort(array) {
var length = array.length;
for (var gap = Math.floor(length / 2); gap > 0; gap = Math.floor(gap / 2)) {
for (var i = gap; i < length; i++) {
insertI(array, gap, i);
}
}
}
function insertI(array, gap, i) {
var inserted = array[i];
var j;
for (j = i - gap; j >= 0 && inserted < array[j]; j -= gap) {
array[j + gap] = array[j];
}
array[j + gap] = inserted;
}