簡體   English   中英

桶排序與快速排序

[英]Bucket Sort vs Quick Sort

一般問題:為什么桶排序比快速排序更有益?

假設數字是從流中傳入的,我的桶就像 (1,10) (11,20) 等。

然后我對桶進行排序,然后將它們放在一起,得到我排序的數字。

或者

我可以把它們放在一個數組中,然后用 Quicksort 對它們進行排序

  • 桶排序:最佳情況 O(N + K) 最壞情況 (N^2);
  • 快速排序:最佳情況 O(1) 平均情況 O(nlogn) 最壞情況 (N^2);

那么為什么我們要對諸如我們想要排序的傳入整數流之類的東西使用桶排序呢? 是因為我們可以根據每個桶中的整數數量做出決定嗎?

謝謝

如果我們預先知道 k 並且它很小 (k << n),那么桶排序可以有效地比快速排序運行得更快,因為快速排序的平均值 n*log(n) 將大於 (n + k),這是桶排序的平均值。

IE,

sortedList = (n*log(n) > n + k) ? bucketSort(list) : quicksort(list);

它可用於流的一個原因是桶排序是就地的。 您可以維護排序后的列表,有效地添加新元素,而不必每次都重新排序。 您只需直接操作數據結構(存儲桶),僅此而已。

另一方面,快速排序不是就地排序,需要完整的排序運行才能返回排序列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM