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


相关推荐: 头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  5种Android数据存储方式汇总  JavaScript如何实现错误处理_try...catch如何捕获异常?  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  EditPlus中的正则表达式 实战(1)  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  如何用AI帮你把自己的生活经历写成一个有趣的故事?  Android中AutoCompleteTextView自动提示  LinuxCD持续部署教程_自动发布与回滚机制  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  Laravel如何配置Horizon来管理队列?(安装和使用)  魔毅自助建站系统:模板定制与SEO优化一键生成指南  如何破解联通资金短缺导致的基站建设难题?  香港服务器租用费用高吗?如何避免常见误区?  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  中山网站制作网页,中山新生登记系统登记流程?  使用Dockerfile构建java web环境  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  Laravel如何使用withoutEvents方法临时禁用模型事件  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  如何选择可靠的免备案建站服务器?  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  Laravel怎么上传文件_Laravel图片上传及存储配置  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  jQuery validate插件功能与用法详解  如何为不同团队 ID 动态生成多个非值班状态按钮  详解jQuery中基本的动画方法  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  常州企业网站制作公司,全国继续教育网怎么登录?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  历史网站制作软件,华为如何找回被删除的网站?  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  nginx修改上传文件大小限制的方法  Laravel中的withCount方法怎么高效统计关联模型数量  如何生成腾讯云建站专用兑换码?  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  网易LOFTER官网链接 老福特网页版登录地址  在Oracle关闭情况下如何修改spfile的参数  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  怎样使用JSON进行数据交换_它有什么限制  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  香港服务器选型指南:免备案配置与高效建站方案解析  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)