【发布时间】:2014-01-01 19:44:01
【问题描述】:
我想知道,当我有一个整数列表并且我需要对它们进行排序时, 而且我知道它们是 32 位整数,我可以使用基数排序(将计数排序作为其稳定排序)在 o(n) 时间内对它们进行排序吗?
不就是使用从 LSB 开始的数字上的位表示来进行 32 次计数排序吗?
我知道以前不知道数字的一般排序需要 o(nlogn),但它们是 32 位整数的事实不是我需要使它成为 o(n) 排序吗?
谢谢!
【问题讨论】:
-
可以,但是您的内存使用量可能会变得很大。基准。对于较小的 n,由于开销,这将比 nlogn 搜索慢。它变得更好的点(如果有的话)是您自己找到的,并且取决于您的目标机器的各个位的相对速度。
-
你可以使用Least significant digit radix sort,它需要
o(nk)时间。 -
基数排序只是
O(n),因为您可以(有时)将log(n)组件替换为常量log(maxN)。 -
如果你不需要知道每个有多少,即一个排序集,你可以使用几个 BitSet。
标签: java radix-sort