希尔排序 --Java实现

举报
ksh1998 发表于 2021/12/26 00:06:01 2021/12/26
【摘要】 一、排序思想        希尔排序(Shell’s Sort)是插入排序的一种,是直接插入排序算法的一种更高版本的改进版本。 把记录按步长gap分组,对每组记录采用直接插入排序方法进行排序;随着步长逐渐减小,所分成的组包含的记录越来越多; 当步长值减小到1时,整个数据合成...

一、排序思想

       希尔排序(Shell’s Sort)是插入排序的一种,是直接插入排序算法的一种更高版本的改进版本。

  1. 把记录按步长gap分组,对每组记录采用直接插入排序方法进行排序;
  2. 随着步长逐渐减小,所分成的组包含的记录越来越多;
    当步长值减小到1时,整个数据合成一组,构成一组有序记录,完成排序;

二、图解

三、代码实现


  
  1. /**
  2. * 希尔排序演示
  3. * @author ksh
  4. */
  5. public class ShellSort {
  6. public static void main(String[] args) {
  7. int[] arr = {5, 1, 7, 3, 1, 6, 9, 4};
  8. shellSort(arr);
  9. for (int i : arr) {
  10. System.out.print(i + "\t");
  11. }
  12. }
  13. private static void shellSort(int[] arr) {
  14. //step:步长
  15. for (int step = arr.length / 2; step > 0; step /= 2) {
  16. //对一个步长区间进行比较 [step,arr.length)
  17. for (int i = step; i < arr.length; i++) {
  18. int value = arr[i];
  19. int j;
  20. //对步长区间中具体的元素进行比较
  21. for (j = i - step; j >= 0 && arr[j] > value; j -= step) {
  22. //j为左区间的取值,j+step为右区间与左区间的对应值。
  23. arr[j + step] = arr[j];
  24. }
  25. //此时step为一个负数,[j + step]为左区间上的初始交换值
  26. arr[j + step] = value;
  27. }
  28. }
  29. }
  30. }

 

文章来源: kangshihang.blog.csdn.net,作者:康世行,版权归原作者所有,如需转载,请联系作者。

原文链接:kangshihang.blog.csdn.net/article/details/116857696

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。