一般问题:为什么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);
那么为什么我们使用桶排序来处理我们想要排序的传入整数流?是因为我们可以根据每个桶中的整数来做出决定吗?
由于
答案 0 :(得分:3)
如果我们预先知道k,并且它很小(k <&n; n)那么桶排序可以比Quicksort更快地运行,因为Quickort的平均值n * log(n)将超过( n + k),这是铲斗分类的平均值。
即,
sortedList = (n*log(n) > n + k) ? bucketSort(list) : quicksort(list);
它可能用于流的原因是桶排序是就地的。您可以维护排序列表,有效地添加新元素,而无需每次都重新排序。你只是直接操纵数据结构(桶),就是这样。
另一方面,Quicksort不是就地,并且需要完整的排序运行才能返回已排序的列表。