希尔排序(简单易懂,图文并貌,插入排序)java代码实现

希尔排序是直接插入排序算法的一种更高效的改进版本。

希尔排序思想:

按照增量d对其进行分组,每组内部分别进行直接插入排序;
(如果不太懂直接插入排序的java具体实现方法,可参考本人所写另一篇博文:直接插入排序
一般首先取d等于序列长度的一半,然后以后每次减半,直到增量等于1.

下面是本人用ProcessOn所绘制的排序过程图:

(以11个数为例进行说明,请大家认真分析此图,耐心一点,写得很详细,看完此图应该会有所收获)
说明:
下图中不同颜色的线代表不同的分组,例如下图中第一行黑色线相连的有426,-2,23,说明426,-2,23被分为一组,并对426,-2,23进行直接插入排序;
第一行蓝色线相连的有62 ,0说明62,0被分为一组;
同理下面的连线分组都是这样的。
作者:喻世文

java实现代码(有注释):

public void toShellSort(int []arr) {
	//增量在刚开始的时候为数组长度的一半,以后每次减半,直到增量大于0不成立
	for(int d = (int)(arr.length/2); d > 0; d = (int)(d/2)) { 
		//首先从每组的第二个数开始,第一次循环是第一组第二个数与第一个数比较,第二次循环是第二组第二个数与第二组第一个数比较
		//进行d次循环后,如果后面还有数
		//第d次循环是第一组第3个数与前面已从小到大排好序的序列比较,第d+1次循环是第二组与第3个数与前面已排好序的序列比较,
		//差不多就是对每组分别进行插入排序
		for(int i = d;i<arr.length;i++) {						
			int tempIndex = i;
			while(tempIndex - d >=0 && arr[tempIndex] < arr[tempIndex-d]) {  
				int temp = arr[tempIndex];
				arr[tempIndex] = arr[tempIndex-d];
				arr[tempIndex-d] = temp;
				tempIndex = tempIndex-d; 
			}		
		}
	}
}

运行效果截图:

在这里插入图片描述
在这里插入图片描述

种一棵树最好的时间是10年前,其次是现在,身为后浪,加油!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MrYuShiwen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值