希尔排序是一种高级的排序算法,接下来我们将使用JS对希尔排序进行实现。
1、准备10000个取值在0~10000之间的随机整数集
var arr = [];
for(var i=0;i<10000;i++){
num = Math.ceil(Math.random()*10000);
arr.push(num);
}
2、指定间隔
gaps = [701,301,132,57,23,10,4,1]; //此处未动态计算间隔,因此最终的效率较低(但较冒泡、排序、插入还是较高的)
3、三重for循环实现
function shell(){
for(var g = 0;g < gaps.length;g++){
for(var i = gaps[g];i < arr.length;i++){//循环确定间隔数
for(var j = i;j >=gaps[g] && arr[j-gaps[g]] > arr[j];j-=gaps[g]){
temp = arr[j-gaps[g]];
arr[j-gaps[g]] = arr[j];
arr[j] = temp;
}
}
}
console.log(arr);
}
此时观察一下控制台 输出:
发现已经进行了排序。
全部代码如下:
说明:此处间隔的确定是用数组指定的方式,这导致了最终效率的低下,后面笔者会以动态确定间隔序列的方式对希尔排序进行优化。