希尔排序

本文介绍了一种高效的排序算法——希尔排序。希尔排序通过调整插入排序的增量来提高排序效率,使得即使是大规模的数据集也能快速地完成排序。文章还提供了一个完整的Java实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

希尔排序

希尔排序是增量为h的插入排序算法。插入排序算法比较和移动的增量为1,如果待排序元素在最后一个,则需要移动n-1个位置才能移到正确的位置。希尔排序根据待排序序列的无序性,将增量变为h,成为比较h增量的子数组(数组较小,无序)就可以使比较的位置可以是h。

Java实现
public class ShellSort {

    public static void main(String[] args) {
        Integer[] a = {3,6,3,2,8,9,7,1,0,8};
        ShellSort.sort(a);
        System.out.println(Arrays.toString(a));
    }

    @SuppressWarnings("unchecked")
    public static void sort(@SuppressWarnings("rawtypes") Comparable[] a) {

        int h = 1;
        while (h < a.length/3) 
            h = 3 * h + 1;

        while(h >= 1) {
            for (int i = h; i < a.length; i++) {
            //将a[j] 插入到 a[j -h], a[j -2h]...中
                for (int j = i; j >= h && a[j].compareTo(a[j - h]) < 0; j = j - h) {
                    Comparable temp = a[j];
                    a[j] = a[j - h];
                    a[j - h] = temp;
                }
            }
            //增长函数
            h = h / 3;
        }
    }
}
排序过程

这里写图片描述
每次排序的过程都是h为增量的数组排序
这里写图片描述
当增量为1时,数组基本已经排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值