希尔排序(简单易懂,图文并貌,插入排序)java代码实现
【摘要】
希尔排序是直接插入排序算法的一种更高效的改进版本。
希尔排序思想:
按照增量d对其进行分组,每组内部分别进行直接插入排序; (如果不太懂直接插入排序的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;
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
运行效果截图:
种一棵树最好的时间是10年前,其次是现在,身为后浪,加油!
文章来源: blog.csdn.net,作者:Mr.Yushiwen,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/MrYushiwen/article/details/107169057
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)