java - 桶排序与快速排序

标签 java sorting stream quicksort bucket-sort

一般问题:为什么桶排序比快速排序更有利?

假设数字是从流传入的,我的存储桶就像 (1,10) (11,20) 等。

然后我对桶进行排序,然后将它们放在一起,得到排序后的数字。

或者

我可以将它们放入一个数组中,然后使用快速排序对它们进行排序

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

那么为什么我们要使用桶排序来处理我们想要排序的传入整数流之类的事情呢?是因为我们可以根据你每个桶中的整数个数来做出决定吗?

谢谢

最佳答案

如果我们预先知道 k,并且它很小 (k << n),那么桶排序可以比快速排序高效地运行得更快,因为快速排序的平均值 n*log(n) 将大于 (n + k),这是桶排序的平均值。

即,

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

它可用于流的一个原因是桶排序是就地的。您可以维护排序列表,有效地添加新元素,而不必每次都重新排序。您只需直接操作数据结构(桶)即可。

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

关于java - 桶排序与快速排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26666571/

相关文章:

java - 结果集编码问题

C++ STL vector 排序——破坏和归零

android - 如何在 webRTC android 中将视频流数据记录为 mp4?

c++ - 电话词生成器帮助 C++

r - 将 system() 输出流式传输到 Shiny 前端(连续)

java - Jersey 不应使用任何表单参数。异常(exception)

java - Java中的三元运算符链表查找方法

java - 如何获取 TableModelEvent 中 JTable 单元格的原始值?

c++ - 合并排序 : Segmentation error Core Dumped

java - 在时区字符串列表中根据 GMT 时间对时区进行排序