2014-11-01 29 views
0

我認爲,選擇排序有以下行爲:每種情況下選擇排序所需的掉期次數是多少?

最好的情況:沒有,因爲所有的元素都正確地安排

最壞的情況要求掉期:N-1互換,即對每個需要交換需要並且有n-1次通過,因爲我們知道n是陣列中元素的數量。

一般情況下:無法找出這個。找出它的過程是什麼?

以上信息是否正確?

這說,在最好的情況下互換的時間複雜度是O(n) http://ocw.utm.my/file.php/31/Module/ocwChp5SelectionSort.pdf

+0

鏈接已損壞。你能更新它嗎? – 2017-03-30 08:20:47

回答

3

選擇排序的每次迭代包括在陣列上掃描的,發現尚未放置還最小元素,然後將其交換到適當的位置。在一個天真的選擇排序實現中,這意味着無論輸入數組中元素的分佈如何,總是會進行n-1次交換。

但是,如果您想盡量減少交換次數,您可以實施選擇排序,以便在要移動的元素已經位於正確位置的情況下不會執行交換。如果你添加這個限制,那麼你是正確的,在最好的情況下可以進行零掉期。 (我不確定是否值得以這種方式修改選擇排序,因爲在大多數情況下交換速度非常快)。

真的,這取決於實施。您可能會有一個奇怪的選擇排序實現,它會在每次迭代時不斷將候選最小元素交換到它的試驗性最終點,這將在最差情況下大幅增加交換次數。不過,我不確定你爲什麼要這樣做。像這樣的細節解釋了爲什麼你的解釋似乎與你在網上找到的內容不一致 - 取決於代碼如何放在一起,交換次數可能不同。

0

選擇排序的最佳情況和最壞情況運行時間是n^2。這是因爲不管最初排列元素的方式如何,在main for循環的第i次迭代中,算法總是檢查剩餘的每個n-i元素以找到剩餘的最小元素。

選擇排序是一種採用最少交換次數的算法,當輸入在像1,2,3,4這樣的排序數組中時,它最好採用零交換。但更相關的問題是選擇種類中交換次數的最壞情況是什麼?它會發生什麼輸入?

答案:交換次數的最壞情況是n-1。但是對於正好相反的有序輸入而言,不會發生這種情況,相反,如6,5,3,2,1這樣的相反排序的輸入不會採用最差的交換次數,而需要交換n/2次交換。那麼,什麼是交換次數需要進行N-1次交換的輸入,如果分析更多,您會發現最糟糕的情況發生在「輸入的正弦波種類」上。或者增加和減少輸入,與波峯和波谷相同。

7 6 8 5 9 4 10 3 - 八(8)個元素的輸入因此將需要7個互換

3 6 8 5 9 4 10 7(1)

3 4 8 5 9 6 10 7(2)

3 4 5 8 9 6 10 7(3)

3 4 5 6 9 8 10 7(4)

3 4 5 6 7 8 10 9(5)

3 4 5 6 7 8 10 9(6)

3 4 5 6 7 8 9 10(7)

因此證明,在選擇排序互換的數目的最壞的情況下爲n-1,最好的情況是0,平均值是(n-1)/ 2掉期。

相關問題