美文网首页
java希尔排序

java希尔排序

作者: 何甜甜在吗 | 来源:发表于2018-02-25 21:18 被阅读0次

什么是希尔排序,可以参考这篇文章:希尔排序原理,图文并茂,通俗易懂

public class ShellSort {
    public static void main(String[] args) {
        int[] a = {1, 3, 5, 2, 4};
        int length = a.length / 2;

        while (length >= 1) {
            sort(a, length);
            length /= 2;
        }
        sort(a, length);

        System.out.println(Arrays.toString(a));
    }

    /**
     * @param a 排序的数组
     * @param n 步长
     * */
    private static void sort(int[] a, int n) {
        for (int i = 0; i < a.length; i++) {
            for (int j = i + n; j <a.length; j++) {
                if (a[i] > a[j]) {
                    int temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                }
            }
        }
    }
}

发现自己写了个错的希尔排序。。。

if (a[i] > a[j]) {
  int temp = a[i];
  a[i] = a[j];
  a[j] = temp;
}

这里一不小心用了冒泡排序!!!应该是插入排序,两个元素交换位置非要使用插入排序,真让人头大。最终正确版本的希尔排序 :

public class ShellSort {
   public static void main(String[] args) {
       int[] a = {1, 3, 5, 2, 4};
       int length = a.length / 2;

       while (length >= 1) {
           sort(a, length);
           length /= 2;
       }
       sort(a, length);

       System.out.println(Arrays.toString(a));
   }

   /**
    * @param a 排序的数组
    * @param n 步长
    * */
   private static void sort(int[] a, int n) {
       int j;
       for (int i = n; i < a.length; i++) {
           int temp = a[i];
           for (j = i - n; j >= 0; j -= n) {
               if (a[j] > temp) {
                   a[j + n] = a[j];
               } else {
                   break;
               }
           }
        
           a[j + n] = temp;
       }
   }
}         

插入排序:有序队列中右移插入元素,并且是从右向左遍历

相关文章

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

    参考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/yqhdxftx.html