就地基数排序的空间开销

Posted

技术标签:

【中文标题】就地基数排序的空间开销【英文标题】:Space overhead of in-place Radix sort 【发布时间】:2015-03-25 13:38:21 【问题描述】:

当递归实现时,是多少。我在这里实现了就地基数排序,没有递归:

http://41j.com/blog/2015/03/in-place-radix-sort-ok-space-overhead/

我相信我实现它的方式 O(r^k) 将需要额外的空间。其中 r 是基数,k 是位数。我是否认为递归解决方案只需要 O(k) 额外空间?

【问题讨论】:

你的代码有很多问题。引用一个微妙的例子:如果int 是 32 位且 bit31if ((v & (1 << bit)) > 0) 将失败。如果v 为负数,则表达式将为非零但不是正数。这不是不支持负数的唯一原因,您对高位的假设也是错误的。 【参考方案1】:

假设每个递归步骤按另一个位排序,最大递归深度等于排序键的位长度。因此,如果您的排序键长度为 k=32 位,则您需要进行 32 级递归,并且每个级别的内存使用量都是恒定的。

是的,递归堆栈需要 O(k) 额外空间。

【讨论】:

以上是关于就地基数排序的空间开销的主要内容,如果未能解决你的问题,请参考以下文章

排序算法之基数排序

C++ 并行就地基数排序

基数排序

算法 - 基数排序

三种线性排序算法:计数排序桶排序与基数排序

基数排序与基数排序