八大排序--希尔排序

目录

什么是希尔排序

步骤

案例说明

代码实现(Java)


什么是希尔排序

        希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。

        插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率;但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位;当需要插入的数据越小,则数据需要移动的次数愈多

        希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序。

        简单来说,希尔排序是将数据分组,将每一组进行插入排序。每一组排成有序后,最后整体就变有序了。

步骤

设定步长为数组的一半,并且依次分组,进行插入排序。

执行完成后步长变为一半继续执行。

直到执行完步长为1时,结束。这样就能先把小的数据放到前面。

案例说明

数组:9125748635

首先计算出步长,步长为10/2=5

将数据分组如下图:9125748635,其中94一组,18,26,53,73

将每个分组进行排序结果为4123598657

再次计算新的步长,5/2=2.5      这里新的步长为2

再次将新的数组分组4123598657,其中42585一组,13967一组

每个分组进行插入排序结果为2143565789

最后一次的步长为1,

        这里在进行插入排序的话,就比从一开始就插入排序要更好,通过多次分组的插入排序让这个数据小的整体在左,大的整体在右,更加快捷。

代码实现(Java)

public class xier {
    public static void main(String[] args) {
        int[] a= new int[]{1,5,9,2,4,3,8,6};
        int step = a.length/2;
//        System.out.println(step);
        do {
            for (int i = step; i < a.length; i++) {
                for (int j = i - step; j >= 0; j=j-step) {
                    if (a[j] > a[j + step]) {
                        int temp = a[j];
                        a[j] = a[j + step];
                        a[j + step] = temp;
                    }
                }
            }
            step = step/2;
        }while (step>0);
        System.out.println(Arrays.toString(a));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值