使用二进制的基数排序

Posted

技术标签:

【中文标题】使用二进制的基数排序【英文标题】:Radix Sort Using Binary 【发布时间】:2015-12-21 19:11:15 【问题描述】:

我想知道对整数值使用基数排序或将值转换为二进制然后对它们进行排序是否更有效。

有人可以向我解释使用带有二进制数的基数排序而不是仅使用整数对值进行排序的优缺点吗?

例如,我想对 5 个值进行排序。 (170, 2, 19, 40, 100)

使用基数排序 Pro 和 Con 使用它们的二进制表示会怎样? (010101010, 0010, 010011, 0101000, 01100100)

【问题讨论】:

你能解释一下整数和二进制数的区别吗?以及如何从前者转变为后者? 【参考方案1】:

基数排序就是对二进制数进行排序。幸运的是,整数也是二进制数(实际上是最好的二进制数)。

使用二进制形式的另一个优点是,如果需要,我们可以按 10 位而不是 8 位进行分组。例如,对于 0 - 1000000 范围内的数字,可以使用 2 x 10 位进行分组/排序。

查看this 以获得有趣的读物,查看this 以获得很酷的动画。

【讨论】:

【参考方案2】:

对于基数排序,当使用二进制时,它将需要您进行更多的传递,但您将使用更少的队列。

使用整数时,您将使用更少的通行证,但需要更多的队列。

我不太确定这对于 Big O 意味着什么。

【讨论】:

以上是关于使用二进制的基数排序的主要内容,如果未能解决你的问题,请参考以下文章

基数排序基数 16(十六进制)

数据结构Java版之基数排序

使用 OpenMP 并行化 C 中的基数排序

实现类似于基数的排序

基数排序时间

给定大量数字时,基数排序无法正确排序