日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

一、希爾排序介紹

希爾排序這個名字,來源于它的發明者希爾,也稱作“縮小增量排序”,是插入排序的一種更高效的改進版本。

希爾排序是基于插入排序的以下兩點性質而提出改進方法的:

1、插入排序在對幾乎已經排好序的數據操作時,效率高,即可以達到線性排序的效率

2、但插入排序一般來說是低效的,因為插入排序每次只能將數據移動一位

二、對數組使用希爾排序

 

阿里朋友的忠告:大廠里的算法很重要,先來了解一下希爾排序

 

  1. 首先,選擇增量 gap = 10/2 ,縮小增量繼續以 gap = gap/2 的方式
  2. 初始增量為 gap = 10/2 = 5,整個數組分成了 5 組
  3. 按顏色劃分為【 8 , 3 】,【 9 , 5 】,【 1 , 4 】,【 7 , 6 】,【 2 , 0】
  4. 對這分開的 5 組分別使用插入排序
  5. 結果可以發現,這五組中的相對小元素都被調到前面了
  6. 縮小增量 gap = 5/2 = 2,整個數組分成了 2 組
  7. 【 3 , 1 , 0 , 9 , 7 】,【 5 , 6 , 8 , 4 , 2 】
  8. 對這分開的 2 組分別使用上節所講的插入排序
  9. 此時整個數組的有序性是很明顯的
  10. 再縮小增量 gap = 2/2 = 1,整個數組分成了 1 組
  11. 【 0, 2 , 1 , 4 , 3 , 5 , 7 , 6 , 9 , 0 】
  12. 此時,只需要對以上數列進行簡單的微調,不需要大量的移動操作即可完成整個數組的排序

 

public static void shellSort(Comparable[] arr) {
    int j;
    for (int gap = arr.length / 2; gap > 0; gap /= 2) {
        for (int i = gap; i < arr.length; i++) {
            Comparable tmp = arr[i];
            for (j = i; j >= gap && tmp.compareTo(arr[j - gap]) < 0; j -= gap) {
                arr[j] = arr[j - gap];
            }
            arr[j] = tmp;
        }
    }
}

 

復習插入排序

阿里朋友的忠告:大廠里的算法很重要,先來了解一下希爾排序

 

private static void sort(Comparable[] arr) {
    int n = arr.length;
    for (int i = 0; i < n; i++) {
        for (int j = i; j > 0; j--) {
            if (arr[j].compareTo(arr[j - 1]) < 0) {
                swap(arr, j, j - 1);
            } else {
                break;
            }
        }
    }
}

private static void swap(Object[] arr, int i, int j) {
    Object t = arr[i];
    arr[i] = arr[j];
    arr[j] = t;
}

三、時間復雜度

阿里朋友的忠告:大廠里的算法很重要,先來了解一下希爾排序

 

性能比較

隨機生成長度為100的數組,對比插入排序和希爾排序的性能:

阿里朋友的忠告:大廠里的算法很重要,先來了解一下希爾排序

 

四、適用場景

希爾排序是對直接插入排序的一種優化,可以用于大型的數組,希爾排序比插入排序和選擇排序要快得多,并且數組越大,優勢越大。

分享到:
標簽:希爾 排序
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定