使用js实现希尔排序
希尔排序(Shell Sort)是插入排序的一种更高效的改进版本,也称为缩小增量排序。它的基本思想是:先将整个待排序的记录序列分割成为若干子序列(由相隔某个“增量”的记录组成)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的记录"基本有序"时,再对全体记录进行一次直接插入排序。
以下是一个使用 JavaScript 实现的希尔排序示例:
function shellSort(arr) {
var len = arr.length,
temp,
gap = 1;
// 动态定义间隔序列
while(gap < len/3) {
gap = gap*3+1;
}
for (gap; gap > 0; gap = Math.floor(gap/3)) {
for (var i = gap; i < len; i++) {
temp = arr[i];
var j = i - gap;
while (j >= 0 && arr[j] > temp) {
arr[j+gap] = arr[j];
j -= gap;
}
arr[j+gap] = temp;
}
}
return arr;
}
// 测试用例
var arr = [4,7,2,9,1,5,8,3,6,0];
console.log("原始数组:", arr);
console.log("希尔排序结果:", shellSort(arr));
在这个示例中,我们首先计算出一个初始的间隔值 gap,然后在每次迭代中,我们都使用这个间隔值对数组进行分组,并对每组进行插入排序。在每次迭代结束后,我们都会减小间隔值,直到间隔值变为 1,此时整个数组都会被视为一个组,进行最后一次插入排序。
浙公网安备 33010602011771号