深圳Java培训:5分钟了解希尔排序
前言
希尔排序(shell sort)是插入排序的一种,它是简单插入排序经过改进之后的一个更高效的算法,这个排序方法又称为缩小增量排序。
希尔排序思想介绍
简单来说,希尔排序是将较大的数据集合逻辑上分割成若干个小的集合,然后对每个分组分别进行插入排序。
例如,假设待排序元素序列有n个元素,首先取一个整数increment(小于n)作为间隔将全部元素分为increment个子序列,在每一个子序列中分别实行直接插入排序。然后缩小间隔increment,重复上述子序列划分和排序工作。直到最后取increment=1,将所有元素放在同一个子序列中排序为止。

算法说明:
待排序数据:12,1,6,7,4,10,5,9
第一次的增量为数组元素的长度/2,即increment=4,得到四个分组:
分组一:12, 4
分组二: 1, 10
分组三: 6, 5
分组四: 7, 9
对这四个分组分别进行插入排序,最终得到:
4,1,5,7,12,10,6,9
第二次比较,increment取上次值的一半,即increment=2,得到两个分组:
分组一:4, 5, 12, 6
分组二: 1, 7, 10, 9
对这两个分组分别进行插入排序,最终得到:
1, 5,7, 6,9,12,10
第三次比较,increment=1,即只有一个分组:
分组一:4,1,5,7,6,9,12,10
   对其进行插入排序,最终得到:
1,4,5,6,7,9,10,12

希尔排序的代码实现
public static void shellSort(int[] arr){  
    int temp = 0;  
    int j = 0;  
    //增量初始值是长度的一半,增量每次变为原来的一半  
    for(int inc = arr.length/2 ; inc >= 1 ; inc /= 2){  
        for(int i = inc ; i < arr.length; i++){  
            temp = arr[i];  
            //将当前数与减去增量之后位置的数进行比较,如果大于,则后移  
            for(j = i - inc; j >=0; j -= inc){  
                if(arr[j] > temp){  
                    arr[j + inc] = arr[j];  
                }else{  
                    break;  
                }  
            }  
            arr[j + inc]=temp;  
        }  
    }  
}

总结
希尔排序是插入排序的改进,但是希尔排序中使用到了多次插入排序,在不同的插入排序过程中,相同的元素在各自的插入排序中可能会移动,造成排序的稳定性被打乱,所以希尔排序是不稳定的。

深圳Java培训:5分钟了解希尔排序相关推荐

  1. 深圳Java培训机构排名榜单:动力节点上榜,第一名耳熟能详

    对于想要学Java的人来说,参考深圳Java培训机构排名榜单是最有效率的选择培训机构的方法,随着近些年学Java编程的人数暴增,Java培训市场也得到了极大的发展,Java培训机构数量空前的多,从而市 ...

  2. 2023年深圳Java培训机构排名,不看后悔系列!

    不忘初心,方得始终.2023,继续战斗!想要学习Java的小伙伴们看过来~深圳Java培训机构排名最新排行榜来了!靠谱的Java培训机构都在这里,总有一个你喜欢的,总能选出一个合适你的,快拿出小本本记 ...

  3. 深圳Java培训:相伴java,感受spring

    深圳Java培训:相伴java,感受spring 时间就这么匆匆忙忙的来到了2019,白驹过隙中我已大学毕业工作了9年多,从那个大学时迷茫懵懂的青涩学子,成为今天已活跃在IT开发行业9年多的油腻大叔. ...

  4. 深圳Java培训未来5-10年的前景怎么样?

    深圳Java培训未来5-10年的前景怎么样? 我想说题主这种情况太正常了!下面这段话,我不想只跟题主说,更多的是说给现在正犹豫要不要考研的小伙伴说的! 分为下面两个方面来说. 1.针对题主的问题分析建 ...

  5. 深圳Java培训学习:Java8.0新特性之Lambda表达式--【千锋】

    深圳Java培训学习:Java8.0新特性之Lambda表达式–[千锋] 前言 Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.本篇文章,主要给大家介绍的是lambda表 ...

  6. 深圳Java培训学习:SpringBoot的yml配置及多环境切换【千锋】

    深圳Java培训学习:SpringBoot的yml配置及多环境切换[千锋] 1,配置风格 从application.properties转换到application.yml 并不改变功能效果,只是改变 ...

  7. 深圳java培训:Java也能做爬虫。

    深圳java培训:Java也能做爬虫. 现在提到爬虫人第一个想到的就是python,其实使用Java编写爬虫也是很好的选择, 下面给大家展示一个使用Java基础语言编写的爬取小说的案例: 实现功能: ...

  8. 深圳java培训:怎样理解 Java 注解和运用注解编程?

    深圳java培训:怎样理解 Java 注解和运用注解编程? 注解和使用 先来看下概念首先从注释来看: 注释:给代码添加说明和解释,注释帮助开发人员理解程序.(Comment)说白点就是注释是给人看的. ...

  9. 深圳Java培训:WebService的简单使用

    深圳Java培训:WebService的简单使用 我们在开发项目时,如果有需求需要从一个项目中去调用另一个项目中的资源,通常可以有四种方案: 1.RESTful 2.WebService 3.RPC ...

最新文章

  1. 【AJAX】Ajax学习总结
  2. Python字符串居然可以这样玩 到底怎么做到的 年薪50w程序员揭晓
  3. Codeforces Educational 38 C. Constructing Tests ( 数学公式推导+暴力)
  4. Linux /etc/inittab 文件的解读
  5. jpeg6 安装问题!
  6. 一个有意思的CStatic和combobox以及Cedit控件结合使用
  7. 1986暑假济南清北学堂腾飞营摸鱼记
  8. 搜狗加入鹅厂,将成为腾讯间接全资子公司!
  9. 愤怒的小鸟的html制作,如何做html5山寨版愤怒的小鸟
  10. vue怎么获取axios的return值?
  11. wow中国正式商业化收费运营 level 31达成
  12. 什么是一级域名、二级域名?
  13. oracle12c cdb修改,ORACLE 12C 新特性CDB及PDB
  14. 基于微信小程序的兼职发布接单系统
  15. Houdini运行时崩溃了怎么办?别害怕,还有一点点救!
  16. 短网址跳转微信公众号
  17. Python3基础,这篇就够了(总结版)
  18. 如何查询某只股票的历史股价?
  19. 初中使用计算机教学反思,初中信息技术教学反思(通用5篇)
  20. vue访问本地静态资源文件

热门文章

  1. 诉说我的心情,倾听我的故事
  2. 阿林要振作,一定要无事平安!
  3. 爱尚黑莓提供Android应用转制BlackBerry 10应用在线工具
  4. 天翼云从业认证(3.5)云安全产品
  5. 网通电信互通廉价解决方案 (转)
  6. python中浮点数和小数的区别_Python中的浮点数和小数
  7. windows的磁盘操作之九——区分本地磁盘与移动硬盘
  8. 2023四大服装管理软件,第1款最受欢迎!
  9. sicily 6767. Making Decisions
  10. QFramework简介