• 排序算法之希尔排序


    参考:https://www.runoob.com/w3cnote_genre/algorithm

    希尔排序

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

    1、声明一个变量gap,初始值为1
    2、对gap进行循环,取到一个满足小于数组长度,且比3的倍数多1条件的最大值。
    3、循环条件为gap大于0
    4、声明一个循环变量i,初始值为gap,小于数组长度
    5、声明一个临时变量,赋值为数组下标为i的元素
    6、声明一个循环变量j,赋值为i-gap
    7、判断条件:j>0且数组下标为j的元素大于tmp,不满足则跳过下一步
    8、将数组下标为j的元素赋值给数组下标为j+gap,并将j-gap赋值给j
    9、将tmp赋值给数组下标为j+gap
    10、将gap除以3并向下取整赋值给gap
    11、重复第三至第十步

    public int[] sort(int[] sourceArray) throws Exception {
        // 对 arr 进行拷贝,不改变参数内容
        int[] arr = Arrays.copyOf(sourceArray, sourceArray.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;
    }
    
  • 相关阅读:
    kubernetes架构部署
    GitLab+Jenkins+Ansible
    python之字典方法
    Python之列表方法
    python之字符串方法
    Python编写从ZabbixAPI获取信息
    Django基础
    扫描某个包下所有的类,输出所有使用了特定注解的类的注解值
    日志切面和统一异常处理
    Mybatis动态排序问题
  • 原文地址:https://www.cnblogs.com/heibaimao123/p/13778474.html
Copyright © 2020-2023  润新知