铲斗排序与快速排序

时间:2014-10-31 02:18:12

标签: java sorting stream quicksort bucket-sort

一般问题:为什么Bucket Sort更有利于Quick Sort?

让我们说数字来自一个流,我的桶就像(1,10)(11,20)等。

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

OR

我可以将它们放在一个数组中,然后用Quicksort

对它们进行排序

Bucket Sort:Bestcase O(N + K)最差情况(N ^ 2); Quicksort:Bestcase O(1)Averagecase O(nlogn)最坏情况(N ^ 2);

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

由于

1 个答案:

答案 0 :(得分:3)

如果我们预先知道k,并且它很小(k <&n; n)那么桶排序可以比Quicksort更快地运行,因为Quickort的平均值n * log(n)将超过( n + k),这是铲斗分类的平均值。

即,

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

它可能用于流的原因是桶排序是就地的。您可以维护排序列表,有效地添加新元素,而无需每次都重新排序。你只是直接操纵数据结构(桶),就是这样。

另一方面,

Quicksort不是就地,并且需要完整的排序运行才能返回已排序的列表。