Java 八大排序之——希尔排序

分析

又叫缩小增量排序

  1. 将待排序列,分割成若干子序列进行直接插入排序
  2. 序列基本有序时,对全体进行直接插入排序


这里写图片描述

方法

  1. 选择增量序列, t1,t2,,tk ,序列依次递减, tk=1
  2. 按增量序列个数k,进行k次排序
  3. 根据增量 ti ,对子序列进行直接插入排序。当增量为1时,整个序列作为一个表处理,得到排序后的数组

代码

        public static void ShellInsertSort(int[] array, int dk) {

        for (int i = dk; i < array.length; i++) {

            // 如果满足插入条件
            if (array[i] < array[i - dk]) {

                int j = i - dk;
                // 存储待排序元素
                int x = array[i];
                // 后移一个元素
                array[i] = array[i - dk];

                // 查找有序表的插入位置
                for (; j >= 0 && x < array[j]; j -= dk) {
                    array[j + dk] = array[j];
                }

                // 插入到正确位置
                array[j + dk] = x;
            }

        }
    }

    public static void shellSort(int array[]) {
        int dk = array.length / 2;
        while (dk >= 1) {
            ShellInsertSort(array, dk);
            common.print(array);
            dk = dk / 2;
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值