只是想知道,如果有人可以解釋爲什麼一個「不穩定的一種」被認爲是壞?基本上我沒有看到任何情況下它真的很重要。任何人都可以提供一個嗎?爲什麼是一種「不穩定的那種」認爲是不好的
回答
如果你有一個圖形用戶界面,允許人們通過單擊該列進行排序的單個列,並使用一個穩定的排序,那麼誰知道人們可以列通過點擊獲得多列排序A,B,C在列C,B,A上依次排列。因爲排序是穩定的,所以當你點擊B時,在B下有相同鍵的任何記錄仍然會被C排序,所以在點擊B之後,記錄按B,C排序。同樣,在你點擊A之後,記錄被排序(不幸的是,上次我在某些微軟產品或其他產品上試用過這款產品時,它看起來好像沒有使用穩定的排序方式,所以這並不奇怪)。
很好的例子。但是,你的意思是說有一個微軟產品不穩定?令人震驚! :) – 2011-05-11 17:15:02
很高興我讀到這個。我不會想到這樣的事情不會使用可靠的排序。 – 2012-08-14 14:34:07
但是,通過添加一個rownum/index或其他類型的唯一計數器作爲複合排序鍵中的最後一個元素,總是不能穩定排序嗎?除非我錯過了一些東西,否則似乎微不足道。 – drake7707 2015-02-14 15:53:14
試想一下,你想組織的一副牌。您可以先按西裝排序,然後按數字值排序。如果你使用穩定的排序,你就完成了。如果你使用了不穩定的排序,那麼他們會按數字順序排序,但套裝會再次混亂。有很多相同的情況出現在實際的開發問題中。
我不認爲這是一個很好的比較,因爲任何比較函數都應考慮套裝和數量。還要注意,如果你使用穩定的排序方法,你必須按數字排序,然後適合,但不是其他方式。 – 2011-05-11 03:15:40
我不是跟着你,@比利。首先,如果且沒有穩定的排序,您需要一個比較函數來考慮這兩個因素。否則,你可以有一個簡單的比較函數,它在動態語言中可以一般地寫成按名稱排序。其次,你似乎覺得只有一種方法來組織一副牌。我向你保證,「組織」可以用多種方式來解釋。 – 2011-05-11 04:02:33
只是有你需要一個排序算法這是穩定的少數情況下。一個例子就是如果你正在實現一個基類排序,這取決於用作構建塊的比較排序算法是穩定的。 (基數排序可以在線性時間內運行,但其輸入比比較排序算法更受限制(比較排序需要O(n lg n)時間))
不一定不穩定的排序是「不好」 ;更多的是穩定的那種「在某些情況下是可取的」。這就是編程語言的原因,例如C++的標準模板庫,提供 - 例如std::sort
和std::stable_sort
- 可讓您指定何時需要穩定性,何時不需要。
因爲他們可以做得比我能做的......從Developer Fusion:
有兩種排序算法0:「穩定排序」和 「不穩定排序」。這些術語是指當兩個 的值相等時所採取的操作 。如果你有 數組T0..size有兩個元素Tn的 和Tk對於n < K,和這兩個元素 比較平等,穩定 排序它們將出現在與在Tn的價值排序 輸出在Tk之前的 。輸出訂單 保留原始輸入訂單。一個 不穩定排序,相比之下,有 沒有輸出這兩個 元素的順序的保證。
需要注意的是,如快速排序排序算法並不穩定或不穩定。實施將決定它是哪一個。
在任何情況下,穩定不一定比不穩定好還是壞 - 它只是有時你需要的順序的兩個相等的元素的保證。當你做需要保證時,不穩定將不適合。
我想OP理解這兩種排序之間的區別是什麼。他在問爲什麼一種不穩定的東西會是「壞的」 - 這意味着他知道是什麼使得一種不穩定的東西。 – 2011-05-11 03:23:07
@比利 - 非常真實。我想,爲了更好的回答,我想明確說明它是什麼,所以我可以說我的最後一段 - 除了特定情況下,其中一段不一定是「壞」或「好」。 – JasCav 2011-05-11 03:24:36
- 1. 爲什麼這不是那種方式?
- 2. 爲什麼我的按鈕不是我說的那種顏色?
- 3. Javascript爲什麼FOR IN是一種不好的做法?
- 4. 爲什麼不是這種尾遞歸?
- 5. 爲什麼把magic_quotes_gpc視爲一種不好的做法?
- 6. 這種接口設計會被認爲是不好的?
- 7. 爲什麼Rails認爲Model屬性是一種方法?
- 8. 爲什麼TimeSpan.Duration()是一種方法而不是屬性?
- 9. 爲什麼第一種方法是promisifying工作而不是第二種?
- 10. 爲什麼在bean中創建受保護的屬性被認爲是一種不好的做法?
- 11. 爲什麼變量在這種情況下是不確定的?
- 12. 爲什麼有兩種相同類型的xmls,一種不是反序列化,另一種是?
- 13. 爲什麼在JavaScript中使用「const」構造是一種不好的做法?
- 14. 爲什麼在HTML中使用onClick()是一種不好的做法?
- 15. 爲什麼從javascript連接SQL數據庫是一種不好的做法?
- 16. 爲什麼交換隻有一種方式,而不是另一種方式?
- 17. 爲什麼名稱形成一種而不僅僅是一種類型?
- 18. Firefox認爲<fieldset>是一種表單元素; Chrome不是
- 19. 爲什麼這個JavaScript是線是正確的,另一種是不
- 20. 保持交易開放被認爲是一種不好的做法?
- 21. 這是爲什麼認爲是不好的做法?還是它? (ASP.Net)
- 22. 的UIImageView不是取代另一種觀點認爲
- 23. 爲什麼這個表格不是第一種正常形式
- 24. 爲什麼數據庫不是一種全局狀態?
- 25. 爲什麼從Solr的這種反應是不正確的
- 26. 爲什麼會發生這種不停地說這不是definied
- 27. WCF netTcpBinding:爲什麼我不能調試,爲什麼不穩定?
- 28. 鎖定可變對象 - 爲什麼它被認爲是不好的做法?
- 29. 爲什麼不是這種印刷方法的工作?
- 30. 爲什麼不是這種方法呈現我的.js.erb文件?
誰認爲它「不好」?你有報價或參考或鏈接?這將有助於爲這種價值判斷提供一些背景。 – 2011-05-11 03:18:51
可能的重複[有什麼好處排序算法是穩定的?](http://stackoverflow.com/questions/808617/what-is-the-benefit-for-a-sort-algorithm-tobe - 穩定) – nawfal 2014-06-13 15:59:47