希尔排序javascript

 通过对直接插入排序的分析,可知其时间复杂度为O(n2),但是,如果待排序序列为正序时,其时间复杂度可提高至O(n)。希尔排序正是对此进行改进的排序。希尔排序的核心理念与插入排序不同,它会首先比较距离较远的元素,而非相邻元素。通过定义一个间隔序列来表示在排序过程中进行比较的元素之间有多远的间隔。

 下图演示了希尔排序中间隔序列是如何运行的:

        

下面我们通过js来实现希尔排序,代码如下:



	
		
   
   
		
	
	
<script type="text/javascript">
	function shellSort(nums){//希尔排序
		var gaps=[5,3,1];//定义间隔区间
		for(var g=0;g
   
   
    
    =gaps[g]&&nums[j-gaps[g]]>temp;j-=gaps[g]){//如果前面一个大于后面一个
					nums[j]=nums[j-gaps[g]];//后移
				}
				nums[j]=temp;//填补
			}
		}
	}
	function show(nums){//显示数组
		for(var i=0;i
    
    
     
     ');
	}
	var nums=[6,0,2,9,3,5,8,0,5,4];
	show(nums);//6 0 2 9 3 5 8 0 5 4
	shellSort(nums);//希尔排序
	show(nums);//0 0 2 3 4 5 5 6 8 9
</script>
	


    
    
   
   

其排序过程如下:


希尔排序根据间隔序列的选取不同,时间复杂度也不同,但是需要注意,应该使间隔序列中的值没有除1以外的公因子,并且最后一个间隔值必须等于1。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值