在O(n)中对[0,n ^ 2 - 1]之间的n个数进行排序?

时间:2012-08-20 17:19:19

标签: algorithm sorting radix-sort

  

可能重复:
  An array of length N can contain values 1,2,3 … N^2. Is it possible to sort in O(n) time?

鉴于n范围内的[0,n^2 -1]号码,我们如何在 O(n)运行时对它们进行排序?

我觉得解决方案涉及radix sort,但我仍然遗漏了一些东西。

n数字是整数。

有什么想法吗?

备注:不是作业!

此致

2 个答案:

答案 0 :(得分:3)

我觉得你运气不好。 基数排序为O(k * n),其中k是位数。 在您的情况下,k = log(n ^ 2),导致O(n * log(n))。

答案 1 :(得分:3)

实际时间取决于您拥有的数据分布,但我会执行以下操作:

  • 制作n桶。
  • 浏览每个数字并将值为i的元素放入存储桶sqrt(i)。
  • 浏览每个存储桶,并对存储桶中的每个元素执行基数排序。