【发布时间】:2012-08-20 17:19:18
【问题描述】:
可能重复:
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 数字是整数。
有什么想法吗?
备注:不是作业!
问候
【问题讨论】:
-
没有空间限制吗?
-
我听说这被称为一些东西,包括桶排序和数学排序。您基本上只需分配一个与您的范围一样大的数组,将整个事物初始化为零,然后遍历未排序的集合,并在集合中的数字索引处增加数组中的值。您也可以将其扩展到稍微复杂的结构,但重要的是要注意它不能很好地扩展 - 它仅适用于数字类型并且可能需要分配巨大的数组。例如,“排序”[0,10^8-1] 范围内的 10000 个整数将需要大约 200MB 的 RAM。
-
@biziclop:与空间无关,只是
O(n)运行时。 -
@Wug 这就是我正在考虑的解决方案,但这是否也意味着您必须搜索数组以收集结果,即 O(n^2)?
-
另一个问题:你怎么知道它是可能的?
标签: algorithm sorting radix-sort