MSB第一个基数排序

时间:2012-09-06 15:35:35

标签: sorting

如书中所述,基数排序通常从LSB到MSB完成。但我认为通过使用MSB到LSB,我们可以将输入元素划分为更小的分区。现在我必须构建一个示例来表明MSB第一基数排序可以渐近地比LSB第一基数排序更糟糕。这是我的赋值问题。 / p>

2 个答案:

答案 0 :(得分:1)

让排序范围为[1,n2],即我们需要在[1,n]范围内进行两次铲斗分选。如果我们使用MSB优先排序,那么时间界限是Σ(i = 1到n)O(ni + n),其中ni是桶(MSB)中的元素数量。 LSB的范围是[1,n]。 对[1,n]范围内的m个数进行排序需要时间O(m + n)。 Σ(i = 1到n)O(ni + n)= n +Σ(i = 1到n)n的值可以是Ω(n2)。

答案 1 :(得分:0)

基数排序不像首次出现可能暗示的那样受限。它现在是许多GPGPU排序的核心(欢呼!bitonic排序回到壁橱里)。我编写了基本的方法,使得基数排序适用于许多数据集,其中键可以通过memcmp(3)在此google doc on radix sort中排序---将图表复制到stackoverflow文本框中是超出我的:-)大“障碍”是不遵循quicksort的“分而治之”的方法,因为它重复了MSB基数排序的昂贵的启动成本。相当于“分而治之”的基数排序是将输入集减少为排序和未排序范围的列表,并在每次传递中一起处理所有剩余的未排序范围。顺便说一下,您可以在sorting doubles in SSE2 registers中看到一个用于bitonic排序的应用程序。 HTH