Java 插入排序之希尔排序的实例

发布时间 - 2026-01-11 02:14:56    点击率:

Java 插入排序之希尔排序的实例

Java代码 

/*希尔排序(Shell Sort)是插入排序的一种。其基本思想是:先取定一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1 
   * 个组,所有距离为d1的倍数的记录放在同一个组中,在各个组中进行插入排序;然后,取第二个增量d2<d1,重复上述的分组和排序, 
   * 直至所取的增量dt=1(dt<dt-1<...<d2<d1),即所有记录放在同一组中进行直接插入排序为止。 
   * new int[]{8,5,1,7,9,4,6},开始分割集合的间隔长度为3的情况,[[6][3][0]比较排序后,[4]和[1]比较排序后,[5]和[2]比较排序后, 
   * 分割集合的间隔长度为1,这时[1]和[0]比较排序后,[2][1][0]....,和直接插入排序一样了。*/ 
  public static void shellSort(int[] intArray) { 
     System.out.print("将要排序的数组为:    "); 
     for(int k=0;k<intArray.length;k++) 
        System.out.print(" "+intArray[k]+" "); 
      System.out.println(); 
     
    int arrayLength=intArray.length; 
    int j,k;//循环变量 
    int temp;//暂存变量 
    boolean isChange;//数据是否改变 
    int dataLength;//分割集合的间隔长度 
    int pointer;//进行处理的位置 
    dataLength=arrayLength/2;//初始集合间隔长度 
    while(dataLength!=0){//数列仍可进行分割 
      //对各个集合进行处理 
      for(j=dataLength;j<arrayLength;j++){ 
        isChange=false; 
        temp=intArray[j];//暂存,待交换值时用 
        pointer=j-dataLength;//计算进行处理的位置 
        //进行集合内数值的比较与交换值 
        while(temp<intArray[pointer]&&pointer>=0&&pointer<arrayLength){ 
          intArray[pointer+dataLength]=intArray[pointer]; 
          //计算下一个欲进行处理的位置 
          pointer=pointer-dataLength; 
          isChange=true; 
          System.out.print("every changing result: "); 
          for(k=0;k<arrayLength;k++) 
            System.out.print(" "+intArray[k]+" "); 
          System.out.println(); 
          if(pointer<0||pointer>arrayLength) 
            break; 
        } 
        //与最后的数值交换 
        intArray[pointer+dataLength]=temp; 
        if(isChange){ 
          System.out.print("Current sorting result: "); 
          for(k=0;k<arrayLength;k++) 
            System.out.print(" "+intArray[k]+" "); 
          System.out.println(); 
        } 
      } 
      System.out.print("指定分割集合的间隔长度为"+dataLength+",对各个集合进行处理后,Current sorting result: "); 
      for(k=0;k<arrayLength;k++) 
        System.out.print(" "+intArray[k]+" "); 
      System.out.println(); 
      dataLength=dataLength/2;//计算下次分割的间隔长度 
    } 
  } 

 运行后的结果为:

Java代码 

将要排序的数组为:     8 5 1 7 9 4 6  
every changing result: 8 5 1 8 9 4 6  
Current sorting result: 7 5 1 8 9 4 6  
every changing result: 7 5 1 8 9 4 8  
every changing result: 7 5 1 7 9 4 8  
Current sorting result: 6 5 1 7 9 4 8  
指定分割集合的间隔长度为3,对各个集合进行处理后,Current sorting result: 6 5 1 7 9 4 8  
every changing result: 6 6 1 7 9 4 8  
Current sorting result: 5 6 1 7 9 4 8  
every changing result: 5 6 6 7 9 4 8  
every changing result: 5 5 6 7 9 4 8  
Current sorting result: 1 5 6 7 9 4 8  
every changing result: 1 5 6 7 9 9 8  
every changing result: 1 5 6 7 7 9 8  
every changing result: 1 5 6 6 7 9 8  
every changing result: 1 5 5 6 7 9 8  
Current sorting result: 1 4 5 6 7 9 8  
every changing result: 1 4 5 6 7 9 9  
Current sorting result: 1 4 5 6 7 8 9  
指定分割集合的间隔长度为1,对各个集合进行处理后,Current sorting result: 1 4 5 6 7 8 9 

 当分割的间隔为1时,变成了直接插入排序。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Java  # 插入排序之希尔排序  # 插入排序  # 希尔排序  # Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等  # Java实现插入排序  # 希尔排序和归并排序  # Java数据结构之插入排序与希尔排序  # java插入排序和希尔排序实现思路及代码  # 长度为  # 希尔  # 组中  # 放在  # 第一个  # 希望能  # 第二个  # 谢谢大家  # 时用  # 仍可  # 变成了  # 样了  # 下次  # 在同一  # 在各个  # lt  # strong  # dt 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 利用python获取某年中每个月的第一天和最后一天  Laravel如何实现模型的全局作用域?(Global Scope示例)  如何在香港服务器上快速搭建免备案网站?  如何快速生成橙子建站落地页链接?  Laravel如何配置任务调度?(Cron Job示例)  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  使用C语言编写圣诞表白程序  Laravel如何创建自定义Facades?(详细步骤)  如何用美橙互联一键搭建多站合一网站?  Bootstrap整体框架之JavaScript插件架构  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  WordPress 子目录安装中正确处理脚本路径的完整指南  如何构建满足综合性能需求的优质建站方案?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  JavaScript数据类型有哪些_如何准确判断一个变量的类型  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  详解jQuery中基本的动画方法  用v-html解决Vue.js渲染中html标签不被解析的问题  手机软键盘弹出时影响布局的解决方法  Laravel如何创建自定义中间件?(Middleware代码示例)  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  浅析上传头像示例及其注意事项  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  制作电商网页,电商供应链怎么做?  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  Python文件异常处理策略_健壮性说明【指导】  太平洋网站制作公司,网络用语太平洋是什么意思?  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  php485函数参数是什么意思_php485各参数详细说明【介绍】  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  如何快速搭建高效简练网站?  Python并发异常传播_错误处理解析【教程】  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  Laravel如何创建自定义Artisan命令?(代码示例)  制作旅游网站html,怎样注册旅游网站?  如何在IIS中新建站点并配置端口与IP地址?  Python文件操作最佳实践_稳定性说明【指导】  如何在云主机上快速搭建多站点网站?  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  教学论文网站制作软件有哪些,写论文用什么软件 ?  百度浏览器如何管理插件 百度浏览器插件管理方法  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  在Oracle关闭情况下如何修改spfile的参数  新三国志曹操传主线渭水交兵攻略  如何用花生壳三步快速搭建专属网站?  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复