java实现希尔排序算法

 更新时间:2015年04月09日 11:16:12   投稿:hebedich  
希尔排序(Shell Sort)是插入排序的一种,是针对直接插入排序算法的改进,是将整个无序列分割成若干小的子序列分别进行插入排序,希尔排序并不稳定。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。

希尔排序算法的基本思想是:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。该方法实质上是一种分组插入方法。

//带增量的插入排序
public static void shellSort(int[] array) {
    int len = array.length;
    int h = 1;
    while (h < len)
      h = h * 3 + 1;
    while (h >= 1) {
      for (int i = 1; i < len; i++) {
        for (int j = i; j >= h; j = j - h) {
          if (array[j] < array[j - h]) {
            Sort.swap(array, j, j - h);//交换j和j-h
          } else
            break;
        }
      }
      h = h / 3;
    }
  }

希尔排序示意图

以上所述就是本文的全部内容了,希望能够对大家熟练掌握java希尔排序有所帮助。

相关文章

  • Event Sourcing事件溯源模式优化业务系统

    Event Sourcing事件溯源模式优化业务系统

    这篇文章主要为大家介绍了Event Sourcing事件溯源模式优化业务系统示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • MyBatis中的模糊查询语句

    MyBatis中的模糊查询语句

    这篇文章主要介绍了MyBatis中的模糊查询语句的相关资料,需要的朋友可以参考下
    2017-03-03
  • Java虚拟机运行时栈的栈帧

    Java虚拟机运行时栈的栈帧

    本节将会介绍一下Java虚拟机栈中的栈帧,会对栈帧的组成部分(局部变量表、操作数栈、动态链接、方法出口)分别进行介绍,最后还会通过javap命令反解析编译后的.class文件,进行分析方法执行时的局部变量表、操作数栈等
    2021-09-09
  • Java实现短信验证码的示例代码

    Java实现短信验证码的示例代码

    Java是一种流行的编程语言,验证码是一种常用的网络安全技术。Java发展至今,网上也出现了各种各样的验证码,下面是用Java实现短信验证码的总结,感兴趣的可以了解一下
    2023-03-03
  • java使用JDBC连接数据库的五种方式(IDEA版)

    java使用JDBC连接数据库的五种方式(IDEA版)

    这篇文章主要介绍了java使用JDBC连接数据库的五种方式(IDEA版),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • IDEA中打jar包的2种方式(Maven打jar包)

    IDEA中打jar包的2种方式(Maven打jar包)

    这篇文章主要给大家介绍了关于IDEA中打jar包的2种方式,分别是不使用Maven直接打Jar包与使用Maven打jar包的两种方法,需要的朋友可以参考下
    2021-05-05
  • hibernate测试时遇到的几个异常及解决方法汇总

    hibernate测试时遇到的几个异常及解决方法汇总

    今天小编就为大家分享一篇关于hibernate测试时遇到的几个异常及解决方法汇总,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • JDK反序列化时修改类的全限定性名解析

    JDK反序列化时修改类的全限定性名解析

    这篇文章主要介绍了JDK反序列化时修改类的全限定性名解析,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Java日常练习题,每天进步一点点(17)

    Java日常练习题,每天进步一点点(17)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • 在Android的应用中实现网络图片异步加载的方法

    在Android的应用中实现网络图片异步加载的方法

    这篇文章主要介绍了在Android的应用中实现网络图片异步加载的方法,一定程度上有助于提高安卓程序的使用体验,需要的朋友可以参考下
    2015-07-07

最新评论