為什麼說平均情況下,插入排序比選擇排序快

時間 2021-05-30 22:26:44

1樓:

(不考慮插入的額外時間開銷)

顯然,因為剩下的最後乙個資料無需比較,所以比較輪數都是n-1輪選擇排序比較的是待排序的資料,比較次數固定是(n-1+1)(n-1)/2

插入排序是用待排序的資料去在排好的資料中比較,比較次數不固定,最壞情況才是(n-1+1)(n-1)/2,最好情況是n-1

(說錯求輕噴)

2樓:Chloe

先來說選擇排序的原理和實現。

注意到外迴圈中的out是已經排好佇列的資料,是每一輪內迴圈中的不變數和初始量。剛開始out=0;內迴圈中,初始化in = out +1;即是不變數旁邊的資料;內迴圈中,將還沒排好的資料和已經排好的資料的最大值相比,如果在還沒排好的資料中找到乙個資料比已經排好的資料小,那就交換這兩個數。這樣就可以保證,在已經排好的資料裡面,都比還沒排好的資料小。

可以看得出來,每次需要比較的資料會逐漸減少,直到最後比較最後兩個資料即可。演算法複雜度是(n-1)+(n-2)+....+2+1 =n*(n-1)/2。

雖然演算法複雜度和氣泡排序一樣,都是O(n*n),但由於交換資料少,執行起來會快很多,因為交換資料比比較資料所需要的時間多很多。

再來說插入排序的原理和實現

插入排序的演算法複雜度也是O(n*n),但它的執行速度比氣泡排序快2倍,大多數情況下也比選擇排序快。

在插入排序裡面,我們把原有的資料看做成已經部分排列好的資料,我們要做的是把還沒排列好的資料插入到已經排好的資料中來。這是插入排序的基本思路。

在計算機裡是這樣實現的,先把第一資料看做成已經排序好的資料,設定out =1,第二個資料看做成「Marked」 player;先將Marked player 複製乙份放到temp中,如果第乙個資料比第二個資料大,那就把第乙個資料往右移動,把第二個資料放到第乙個資料移動後留出來的空白裡。這樣第一二個資料都排序好了。然後out ++;

在外迴圈裡,out從1開始增加,一直移動到最右邊,從out到最右邊的資料都是還沒排序好的資料。在內迴圈的while loop裡面,in的起點是out,然後向左移動,直到找到比temp大的資料,然後把temp插入到這個資料的前面。

它的演算法複雜度可以這樣算,第一次只需要比較1位,第二次比較2位,第三次比較3位,最後一次比較n-1位,需要比較的次數= 1+2+3+4+...+n = n*(n-1)/2; 但是其實在找到插入點之前,平均只需要比較一半的資料即可,不需要全部比較。所以我們可以再將比較的次數除以2,得到n*(n-1)/4。

雖然複製的次數和其他的排序一樣,但複製比不如交換那麼費時間。所以總的來說,一般情況下,插入排序比選擇排序快一倍。

3樓:ZuckSong

(1)選擇排序是最機械的一種排序,在排序的過程中完全不考慮原始序列的任何排序情況,只是機械的從剩餘的序列中選擇出最大/最小的元素,無論初始序列是什麼樣的排列方式,選擇排序都得經過N(N-1)/2次比較。

(2)插入排序的時間跟原始序列的排序方式有關,最差的情況是原始序列完全倒序,需要N(N-1)/2次比較;最好的情況是原始序列完全正序,時間複雜度只需要N次比較;

平均下來顯然插入排序要快一點。

4樓:Yuan Huang

wikipedia:

選擇排序

插入排序

選擇的邏輯是「每次在陣列中找最小(大)的放到另乙個陣列的最後乙個」,這樣無論陣列是什麼樣子的都要遍歷需要排列的陣列直到只有最後乙個,所以,第乙個數字要遍歷n遍,第二個n-1……一直到1.

插入排序法是類似我們打撲克時候理牌,拿到第一張,放在手裡,第二張比較一下,是否大於第一張,大於就放在第一張的後面,這樣第三張可能在掃瞄到第一張的時候就知道自己的位置,或者第二張,以此類推,第n張可能比較第一張牌,然後直接插到第一張前面,也可能比較到最後一張,插到最後面。

所以選擇排序的比較次數是固定的,而插入不是固定的,那些可能被省掉的操作就是變快的部分。

為什麼在平均情況下快速排序比堆排序要優秀?

讓子彈飛飛飛 因為堆排無法利用快取,陣列元素很少和其他相鄰的元素進行比較,因此快取未命中的次數要遠遠高於大多數比較都在相鄰元素間進行的演算法,比如快排 歸併這些。 段友 快速排序的一般過程是,隨機選取陣列中的乙個值,作為比較標準,一般稱之為樞值 Pivot 然後把整個陣列中小於樞值的資料分到乙個組,...

雙方什麼陣容的情況下選瑤比選其他輔助好?

123圓圓君 對面有百里守約,鍾馗,妲己,火舞,婉兒,阿軻,蘭陵王這種秒人的英雄的時候,用瑤保護AP和AD。四級以前先幫法師壓中取得優勢。如果可以最好配合法師拿下人頭。四級以後跟射手。這樣,只要隊友不是太坑都可以打出優勢。基本上法師和射手都打出優勢了,這局就穩了。打團的時候靈活換盾吃傷害。親測有效,...

為什麼有人說貓咪同體積情況下獅子老虎比不過?

卡卡羅特Aaron 老虎第一,看過動物世界。一群大牛 上百 趕路。老虎過去就咬乙隻的脖子,然後就是倒下了,同伴不離不棄,到了晚上還是走了。然後老虎就開吃。獅子是群居動物。不解釋。放大十倍那種性格。不暗殺,又不組隊。吃雞都不行 王師北定中原 單純的等比放大沒有任何意義。因為等比放大後,體型體重是呈立方...