美文网首页
希尔排序(java)

希尔排序(java)

作者: castlet | 来源:发表于2020-05-01 16:27 被阅读0次
  • 将原序列分为若干个自序列,此时对每个子序列的数据将会较少,然后在这些子序列中分别进行直接插入排序,当整个序列都基本有序的时候,再对全体记录进行一次直接插入排序。
  • 所谓基本有序,就是最小的关键字基本在前面,大的关键字基本在后面,不大不小的在中间。
  • 将相距某个"增量"的记录组成一个子序列,这样才能保证在自序列内分别进行直接插入排序后得到的结果是基本有序,而不是局部有序。
  • 时间复杂度:O[nlogn] ~ O(n^2),为不稳定的排序算法

代码

void hillSort(int[] arr){
    if (arr == null || arr.length == 0) {
        return;
    }
    int k = arr.length;
    while (k > 1) {
        // 增量k,增量值为 k/3 + 1是个经验值。
        // 增量的最后一个值必须为1,这样才能保证排序的正确性。
        k = k / 3 + 1;
        // 对子序列执行直接插入排序
        for (int i = k; i < arr.length; i++) {
            int tmp = arr[i];
            int j = i;
            while (j >= k && (arr[j - k] > tmp)) {
                arr[j] = arr[j - k];
                j = j - k;
            }
            arr[j] = tmp;
        }
    }
}

相关文章

  • 排序算法(四) 希尔排序(插入排序的进化)

    参考Java排序算法(四):希尔排序常见排序算法 - 希尔排序 (Shell Sort) 希尔排序算法是按其设计者...

  • (306)排序-java实现的选择/插入/希尔排序

    引言 用java实现的选择排序、插入排序、希尔排序。 代码(java) 运行结果

  • 常见排序的java实现

    常见排序的java实现 常见排序java实现 插入排序(二分插入排序) 希尔排序 快速排序(三数中值快排) 冒泡排...

  • java希尔排序

    什么是希尔排序,可以参考这篇文章:希尔排序原理,图文并茂,通俗易懂 发现自己写了个错的希尔排序。。。 这里一不小心...

  • 希尔排序(JAVA)

    算法   希尔排序是对直接插入排序的改进,但其本质上仍然是插入排序,只不过它设置了步长,就变成了跨步长的插入排序。...

  • 希尔排序(java)

    将原序列分为若干个自序列,此时对每个子序列的数据将会较少,然后在这些子序列中分别进行直接插入排序,当整个序列都基本...

  • 排序算法Java实现

    本文会通过Java语言实现:冒泡排序,插入排序,选择排序,归并排序,快速排序,桶排序,计数排序,基数排序,希尔排序...

  • Java基础01 冒泡排序

    冒泡排序 Java中有很多种排序:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、...

  • 实现几种常见排序方法

    Java实现几种常见排序方法 日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还...

  • Java排序算法 - 希尔排序

    希尔排序 概括:其实希尔排序就是将数组进行拆分,对分出来的每一个数组进行直接插入排序。 具体讲解 设置一个step...

网友评论

      本文标题:希尔排序(java)

      本文链接:https://www.haomeiwen.com/subject/sueqghtx.html