LeetCode刷题-912.排序数组-希尔排序

bridge
2022-01-30 / 2 评论 / 0 点赞 / 694 阅读 / 632 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-02-01,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

一、算法步骤

  • 选择一个增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1;
  • 按增量序列个数 k,对序列进行 k 趟排序;
  • 每趟排序,根据对应的增量 ti,将待排序列分割成若干长度为 m 的子序列,分别对各子表进行直接插入排序。仅增量因子为 1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。

二、动画演示

三、参考代码

解题源码: 链接

public class ShellSort implements ISortArray {

    @Override
    public int[] sortArray(int[] nums) {
        // 对 arr 进行拷贝,不改变参数内容
        int[] arr = Arrays.copyOf(nums, nums.length);

        int gap = 1;
        while (gap < arr.length) {
            gap = gap * 3 + 1;
        }

        while (gap > 0) {
            for (int i = gap; i < arr.length; i++) {
                int tmp = arr[i];
                int j = i - gap;
                while (j >= 0 && arr[j] > tmp) {
                    arr[j + gap] = arr[j];
                    j -= gap;
                }
                arr[j + gap] = tmp;
            }
            gap = (int) Math.floor(gap / 3);
        }

        return arr;
    }

}

参考:https://mp.weixin.qq.com/s/vn3KiV-ez79FmbZ36SX9lg


以上是个人学习记录,如有不正确请多多包涵,也欢迎评论告诉我,谢谢~


0

评论区