喜欢互联网技术的同学,一定要关注我哦!
上一次,讲述了直接插入排序,并且使用JAVA语言对其进行实现,
传送门:《图解直接插入排序算法,你真的了解它了吗?》
这一次将讲述一下,直接插入排序的改进版,那就是希尔排序
希尔排序的基本思想
先将整个待排序记录系列分割成若干个子序列,在子序列内分别进行直接插入排序,待整个序列基本有序时,再对全体记录进行一次直接插入排序。
图解希尔排序
具体排序过程:
如下面10个数,取增量d=10/2=5,将所有相距为5的记录构成一组,从而将整个待排序的记录序列分割成5个子序列,如下图的5种不同颜色分别代表5个不同的分组,分别是【0,5】,【9,3】,【6,4】【7,2】,【5,1】,然后对这几个分组执行直接插入排序,然后再缩小增量d,取d=d/2的下限为2,变成第二行的两种颜色的分组,然后在执行直接插入排序,直到d=1,然后在执行一次直接插入排序。
执行完3次希尔排序后,就可以排好序了!
JAVA实现希尔排序算法
测试结果
为了方便测试,采用了随机生成数据的数组
可以看到测试结果符合我们的预期
与直接插入排序性能对比
结果令我们大吃一惊,排序100000个数,希尔排序比直接插入排序快了100倍!