javascript实现希尔排序算法

希尔排序是一种高级的排序算法,接下来我们将使用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);
		}

此时观察一下控制台 输出: 发现已经进行了排序。

全部代码如下:

说明:此处间隔的确定是用数组指定的方式,这导致了最终效率的低下,后面笔者会以动态确定间隔序列的方式对希尔排序进行优化。

经验分享 程序员 微信小程序 职场和发展