希尔排序(递减增量排序算法)

希尔排序是直接插入排序的优化版本,属于不稳定的排序算法。通过设置不同的步长gap进行分组,对每组使用直接插入排序,逐步缩小步长直至为1,完成整个排序过程。步长序列的选择对效率有很大影响,常见的选取方式是从数组长度一半开始,每次减半,直至步长为1。
摘要由CSDN通过智能技术生成

希尔排序法

算是直接插入排序法的增强版,是一种非稳定的排序方法。

因为直插法是对比较有顺序的数组进行操作性能更好,而且直插法每次操作只移动一个元素,所以希尔排序法法便诞生了。

将待排序数组按照步长gap进行分组,然后将每组的元素利用直接插入排序的方法进行排序;每次再将gap折半减小,循环上述操作;当gap=1时,利用直接插入,完成排序。

可以看到步长的选择是希尔排序的重要部分。只要最终步长为1任何步长序列都可以工作。一般来说最简单的步长取值是初次取数组长度的一半为增量,之后每次再减半,直到增量为1。更好的步长序列取值可以参考维基百科

示意图如下:
在这里插入图片描述

public static void sort(int[] a) {
    int length = a.length;
    int h = 1;
    while (h < length / 3) h = 3 * h + 1;
    for (; h >= 1; h /= 3) {
        for (int i = 0; i < a.length - h; i += h) {
            for (int j = i + h; j > 0; j -= h) {
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值