希爾排序

一、希爾排序介紹:

  希爾排序是希爾(Donald Shell)於1959年提出的一種排序算法。希爾排序也是一種插入排序,它是簡單插入排序通過改進以後的一個更高效的版本,也稱爲縮小增量排序。java

二、 希爾排序基本思想:

  希爾排序是把記錄按下標的必定增量分組,對每組使用直接插入排序算法排序;隨着增量逐漸減小,每組包含的關鍵詞愈來愈多,當增量減至1時,整個文件恰被分紅一組,算法便終止、算法

三、希爾排序實現示意圖:

 

四、使用交換法實現希爾排序:

import java.util.Arrays;
public class Test04_希爾排序 {
    public static void main(String[] args) {
        int[] arr = {8, 9, 1, 7, 2, 3, 5, 4, 6, 0};
        shellSort(arr);
    }

    public static void shellSort(int[] arr) {
        /**
         * 最外層循環控制步長
         * 第二次循環控制循環次數
         */
        int count = 0;
        for (int gap = arr.length / 2; gap > 0; gap /= 2) {
            for (int i=gap;i<arr.length;i++){
                for (int j=i-gap;j>=0;j-=gap){
                    if (arr[j] > arr[j+gap]){
                        int temp = arr[j];
                        arr[j] = arr[j+gap];
                        arr[j+gap] = temp;
                    }
                }
            }
            System.out.println("第"+(++count)+"次排序結果爲:"+ Arrays.toString(arr));
        }
    }

    //一步一步推導過程
    /*public static void shellSort(int[] arr){
     *//**第一輪
     * 外層循環(i=5)是控制輪數,即10個
     * 將10個數據分紅了:10 / 2 =5(組)
     for (int i=5;i<arr.length;i++){
        for (int j=i-5;j>=0;j-=5){
             if (arr[j] > arr[j+5]){
             int temp = arr[j];
             arr[j] = arr[j+5];
             arr[j+5] = temp;
             }
        }
     }
     System.out.println("第一次排序結果爲:"+ Arrays.toString(arr));

     *//**//**第二輪
     * 5 / 2 =2(組)
     *//**//*
        for (int i=2;i<arr.length;i++){
            for (int j=i-2;j>=0;j-=2){
                if (arr[j] > arr[j+2]){
                    int temp = arr[j];
                    arr[j] = arr[j+2];
                    arr[j+2] = temp;
                }
            }
        }
        System.out.println("第二次排序結果爲:"+ Arrays.toString(arr));

        *//**//**第三輪
     * 2 / 2 = 1(組)
     *//**//*
        for (int i=1;i<arr.length;i++){
            for (int j=i-1;j>=0;j-=1){
                if (arr[j] > arr[j+1]){
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        System.out.println("第三次排序結果爲:"+ Arrays.toString(arr));*//*
    }*/
}
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息