为什么我们在Bucket Sort中使用Insertion Sort?

时间:2015-10-29 02:51:46

标签: algorithm sorting insertion-sort bucket-sort

Bucket sort是一种线性时间排序。

为什么我们在其中使用插入排序?我们知道插入排序需要O(n2)时间。 为什么我们不能在其中使用任何线性排序? 如我们所见,在每个桶中我们使用插入排序O(n2)。铲斗的总复杂度O(n)如何排序? 为什么我们不使用O(nlogn)排序,例如合并排序或快速排序?

2 个答案:

答案 0 :(得分:2)

在我们可以预期每个存储桶中只有几个项目时,在存储桶中使用插入排序的存储桶排序是合理的。当只有少数项目时,插入排序就可以了。

在现实生活中,这种情况不会经常发生。通常是当我们期望数据被均匀分布时,因为我们正在排序哈希顺序或类似的东西。

当整个排序时,最常使用存储桶排序 - 即,存储桶根本不需要进行排序,您只需将每个项目附加到存储桶列表中即可。

有时我们会进行自上而下的基数排序,就像桶排序一样,然后对每个桶进行桶排序。结合保留非emtpy存储桶的位掩码,当排序键为32位整数时,这可以是一种非常快速的排序方式。

您还可以通过在不同的位范围内反复进行铲斗排序来执行自下而上的基数排序,并且只需将项目附加到每个存储桶。这种铲斗排序是稳定的,所以当你用高位进行铲斗分拣时,先前的排序会打破联系,你可以通过对低位进行排序来获得。

答案 1 :(得分:0)

  

插入排序需要O(n2)时间。

这不是全部故事。对于部分排序的数组,插入排序表现良好,它具有线性时间复杂度。

每个条目离其最终位置不远的数组是部分排序数组的典型示例。这就是Bucket sort的情况。