八大排序算法 之 希尔排序(缩小增量排序)

排序思想:

1,希尔排序属于插入排序算法;

2,希尔排序是插入排序算法的优化,插入算法在插入过程中要移动很多次数字,几趟下来,移动次数就多不胜数,希尔排序的思想是先设法将数组排列成大致有序的,这样再进行插入排序是就会减少大量移动,从而优化算法

3,将数组调整成大致有序的步骤按照原理被称为缩小增量法,即每次拿一个数跟(增量间隔)后的数比较,按大小调整位置(调整方法为插入排序法),每趟执行完后增量减少一半,依次类推,直到增量减少为1,即进行最后一次的直接插入排序(可参考本系列直接插入排序算法帖子);

4,参考图片:


排序趟数:如果2^n<length<2^n+1,则循环趟数是:n

如此例,length = 10 > 8,趟数是3.

排序原理:

建立增量d,间隔比较,插入方法排序---依次缩小增量,继续排序---当增量缩小为1,进行一次最后排序(直接插入排序)

代码实现如下:

//希尔排序
	public static void shellSort(int[] array){
		int d = array.length / 2;
		while(d >= 1){
			//采用插入排序的思想将增量间隔的数字排序,当增量为1时,即跟直接插入排序相同
			for (int i = d; i < array.length; i++) {
				int temp = array[i];
				int j = i - d;
				while(j >= 0 && temp < array[j]){
					array[j + d] = array[j];
					j -= d;
				}
				array[j + d] = temp;
			}
			d /= 2;//增量每次减小
		}
	}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值