排序算法 -- (二)希尔排序

希尔排序


用法:对于直接插入排序问题,数据量巨大时

针对直接插入排序的下效率问题,有人对次进行了改进与升级,这就是现在的希尔排序

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


1、原理

1、将数的个数设为n,取奇数k=n/2,将下标差值为k的书分为一组,构成有序序列。

2、再取k=k/2 ,将下标差值为k的书分为一组,构成有序序列。

3、重复第二步,直到k=1执行简单插入排序。

2、实现

1、首先确定分的组数。

2、然后对组中元素进行插入排序。

3、然后将length/2,重复1,2步,直到length=0为止。

3、代码


public class SheelSort {

    /* 希尔排序 */
    public static void sort(int[] a) {

        int len = a.length; // 单独把数组长度拿出来,提高效率
        while (len != 0) {
            len = len / 2;
            for (int i = 0; i < len; i++) {// 分组
                for (int j = i + len; j < a.length; j += len) {// 元素从第二个开始
                    int k = j - len;// k为有序序列最后一位的位数
                    int temp = a[j];// 要插入的元素

                    for(;k>=0&&temp<a[k];k-=len){ // 从后往前遍历
                        a[k+len]=a[k]; 
                    }

                    a[k + len] = temp;

                    OutNums.print2(j+" -- "+i, a);
                }
            }
        }

    }

}

4、测试结果

测试类:

这里写图片描述


控制台输出:

这里写图片描述


输出工具类:OutNums.java

这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天涯共明月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值