桶排序和基數排序是親密的表親;桶排序從MSD到LSD,而基數排序可以在「方向」(LSD或MSD)中進行。兩種算法如何工作,特別是它們有何不同?桶排序和基數排序有什麼區別?
回答
RadixSort
和BucketSort
的初始合格完全相同。取決於最大數字中的位數,這些元素被放入增量範圍(例如0-10,11-20,... 90-100)的buckets
(或bins
)中。
然而,在下一回閤中,BucketSort
將這些「桶」排序並將它們附加到一個數組中。然而,RadixSort
追加沒有進一步排序的桶,並基於數字的第二個數字(十位)來「重新桶」。因此,BucketSort對於'Dense'數組更有效,而RadixSort可以很好地處理稀疏(很好,不完全稀疏但間隔開)數組。
桶排序和基數排序就像姐妹排序算法,因爲它們不是比較排序,總體思路是相似的。而且,它們在實現上都有點抽象。
基數排序:
沙蔘裝置基(二進制,八進制,十進制,等等)。因此,這種排序是爲數字(也用於字符串)。這工作時各元件E是像電子ķ ... E ëË,其中e 我是在一定範圍內。 (通常爲0至在ASCII字符等以十進制0-9或0-255的基座)
然後,它使用穩定子排序算法的k個道次(它必須是穩定否則基數排序贏得不工作)對數字進行排序。這種子排序算法通常是Counting排序或Bucket排序,但是它不能是基數排序本身。
可以從最高有效數位或最低有效位,因爲它混洗在每一通(從k以0或0至k)的每個數字
它是一種穩定排序算法開始。
桶排序:
它分離陣列分成更小的組或桶,並將它們個別地使用子排序算法或遞歸調用自身排序,然後組合結果。例如,通過將球員加入隊伍中,然後根據他們的球衣號碼排序球員,或將球隊從1-30分成1到1-10,11-20,21-30三個球隊等類別來排序球員。
組合步驟很簡單(與合併排序不同)。只複製每個桶的元件返回到原始排列或與以前的桶的尾加入每個桶的頭部(在鏈表的情況下)
基數/鹼可以是一個類型/實例的組/桶的同時排序數字。因此,你能想到MSD基數作爲排序
桶排序桶的修改實例不就地但穩定排序算法。但是,某些桶類的變體可能不穩定(如果使用不穩定的子分類算法)
一些比較好的:) – 2016-05-07 14:17:29
- 1. 訂購和排序有什麼區別?
- 2. 排序和拓撲排序有什麼區別?
- 3. 「排序」和「排序!」有什麼區別?方法在紅寶石?
- 4. 桶與基數排序
- 5. 爲什麼我的排序程序太慢? (基數/桶排序java)
- 6. Spark中的排序和orderBy函數有什麼區別
- 7. 基數排序和計數排序
- 8. 桶排序降序?
- 9. 基數排序:「基數」在基數排序中意味着什麼?
- 10. Java數組,區別和排序
- 11. 方案爲水桶排序和計數排序
- 12. 桶排序爲整數
- 13. 桶排序實現
- 14. 可見性和排序之間的關係/區別是什麼?
- 15. unix中以下三種排序命令有什麼區別?
- 16. 列表,排序列表和數組列表之間有什麼區別? (c#)
- 17. 對基數排序只使用穩定的排序算法有什麼需要?
- 18. 基數排序,排序浮點數據
- 19. 地圖縮小中的全部訂單排序和二次排序有什麼區別?
- 20. 交換排序和冒泡排序有什麼區別?他們是一樣的嗎?
- 21. 排序使用基數排序
- 22. 爲什麼使用排序後的輸入運行桶排序更快?
- 23. 代碼和程序有什麼區別?
- 24. Python基數排序
- 25. 基數排序Python
- 26. 基數排序Java
- 27. 基數排序,R
- 28. 基數按降序排序
- 29. 基數排序:降序
- 30. 優先級隊列中的排序與未排序數據爲什麼自動排序和排序等待?
您能否擴展此答案以解釋爲什麼這兩種方法的時間複雜性不同?即爲什麼是桶排序O(n + k),但基數排序是O(nk)? – 2015-02-23 09:24:51
@ShaunBudhram這是一個老問題,但如果有人讀這個想知道。從描述中可以看出,桶排序在N上傳遞一次,然後合併K個桶(桶內的順序是任意的)。儘管基數排序對每個桶都有一個傳遞,但在這裏我認爲排序字符串會是更好的例子,因此您需要執行復雜度爲N的K遍。 – 2016-02-28 12:15:11
「BucketSort命令這些」桶「是什麼意思?每個桶是用不同的算法或者什麼排序的?因爲如果您按10秒分組,每個存儲桶都沒有完全分類。 – mpen 2017-10-24 20:11:34