希尔排序

这篇用到直接插入排序,建议先阅读上一篇:直接插入排序算法

希尔排序(Shell's Sort)是插入排序的一种 “缩小增量排序”,直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。

希尔排序是把记录按下标的一定分量分组,对每组使用 直接插入算法排序 ;随着增量逐渐减小,每组包含的关键词越来越多,当增量减至 1 的时候,整个文件恰被分成一组,算法便终止。

java实现:

public static void Shell_Sort(int[] arr)
	{
		int increment = arr.length;
		int i, j, temp;
		do {
			increment = increment/3 + 1;
			for(i = increment + 1; i < arr.length; i ++)
			{
				if(arr[i] < arr[i-increment])
				{
					temp = arr[i];
					for(j = i - increment; j > 0 && arr[j] > temp; j-=increment) //大于temp(arr[i])的后移
						arr[j+increment] = arr[j];
					arr[j+increment] = temp;         //将arr[i]插入
				}
				
			}
		} while (increment > 1);
	}

这里的increment【也就是增量选取非常关键】,可究竟应该选取什么样的增量才是最好,目前还是一个数学难题,迄今还没有

人找到一种最好的增量序列。希尔排序时间复杂度为 O(  n^(3/2)  )。需要注意的是,增量序列的最后一个增量值必须等于1

才行。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值