繁体   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