亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
java - 關于插入排序算法的效率和希爾排序的理解問題
巴扎黑
巴扎黑 2017-04-18 10:03:50
[Java討論組]

插入排序:對于隨機排列長度為N且主見不重復的數(shù)組,平均情況下插入排序需要~N^2/4次比較以及~N^2/4。最壞情況下需要~N^2/2次比較和~N^2/2次交換。

  • 第一個問題:想請教一下這個效率是怎么計算的?

希爾排序是基于插入排序所改進的算法。書上是這樣描述的:中心思想是使數(shù)組中任意間隔為h的元素都是有序的。這樣的數(shù)組被稱為h有序數(shù)組。也就是說,一個h有序數(shù)組就是h個互相獨立的有序數(shù)組編織在一起組成一個數(shù)組。
這樣說我是能夠理解的,但是它的代碼有點令我難以理解。

//一些簡單的通用性代碼就不粘貼了,減少篇幅,以免各位看官看的煩
    public static void sort(Comparable[] a) {
        int n = a.length;

        // 3x+1 increment sequence:  1, 4, 13, 40, 121, 364, 1093, ... 
        int h = 1;
        while (h < n/3) h = 3*h + 1; 

        while (h >= 1) {
            for (int i = h; i < n; i++) {、
                //less是用來比較大小的,a[j]<[j-h]
                for (int j = i; j >= h && less(a[j], a[j-h]); j -= h) {
                    //交換a[j]和a[j-h]的位置
                    exch(a, j, j-h);
                }
            }
            assert isHsorted(a, h); //判斷是否有序的代碼
            h /= 3;
        }
        assert isSorted(a);
    }
  • 第二個問題是:h這個遞增序列是什么意思?它有什么作用?為什么是h=3*h+1?

  • 第三個問題是:書上說最壞的情況是N^(3/2)。N是數(shù)組大小。這個效率是如何計算出來的?

巴扎黑
巴扎黑

全部回復(1)
怪我咯

問題一:
前提知識:
等差數(shù)列前n項和

插入排序是從第2元素開始插入排序,插入過程,可知最壞情況就是逆排序,一共要執(zhí)行1+2+3+...+n-1次,根據前n項和結果為(n-1)n/2約等于n^2/2,類似問題可見此處.

問題二:
前提知識:

  1. 插入排序的算法復雜度的計算(即上)

  2. 希爾排序(shell sort)的理解
    此處h的定義增量為3,沒有任何強制要求,h的增量也可以是2

示例:

注意:增量為2時,是對[72,874,283,911,820]跟[401,141,592,887,348]兩組數(shù)組全進行插入排序.

問題三:
前提知識:數(shù)論
詳見<數(shù)據結構與算法分析_JAVA語言描述>定理7.4:

菜鳥總結,大手輕拍.

最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關于我們 免責申明 意見反饋 講師合作 廣告合作 最新更新
php中文網:公益在線php培訓,幫助PHP學習者快速成長!
關注服務號 技術交流群
PHP中文網訂閱號
每天精選資源文章推送
PHP中文網APP
隨時隨地碎片化學習
PHP中文網抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號