Bucket sort和radix sort是近亲; bucket sort从MSD到LSD,而radix sort可以同时进入“方向”(LSD或MSD)。两种算法如何工作,特别是它们有何不同?
答案 0 :(得分:39)
RadixSort
和BucketSort
的初始传递完全相同。元素放在增量范围的buckets
(或bins
)中(例如0-10,11-20,... 90-100),具体取决于最大数字中的位数。
然而,在下一个传递中,BucketSort
命令这些“桶”并将它们附加到一个数组中。但是,RadixSort
会在没有进一步排序的情况下附加存储桶,并根据数字的第二个数字(十位)对其进行“重新存储”。因此,BucketSort对于'Dense'数组更有效,而RadixSort可以很好地处理稀疏(好的,不完全稀疏但间隔开的)数组。
答案 1 :(得分:19)
Bucket Sort和Radix Sort就像姐妹排序算法,因为它们不是比较排序,一般的想法是相似的。而且,它们在实现中都有点抽象。
基数排序:
Radix表示 base (二进制,八进制,十进制等)。因此,此排序用于数字(也用于字符串)。这适用于每个元素E类似于e k ... e 2 e 1 e 0 ,其中e i 在某个范围内。 (通常为0到十进制的基数,如十进制的0-9或ASCII字符的0-255)
然后使用稳定的子排序算法的k遍(必须稳定或者基数排序不会工作)来对数字进行排序。这种子排序算法通常也是Counting sort或Bucket排序,但它不能是Radix排序本身。
您可以从最高有效数字或最低有效数字开始,因为会在每次传递中将每个数字混洗(从k到0或0到k)
这是一种稳定排序算法。
Bucket Sort:
它将数组分成较小的组或存储桶,并使用子排序算法或递归调用自身对它们进行单独排序,然后组合结果。例如,通过添加到他们团队的桶中对玩家进行排序,然后根据他们的球衣号码或者将数字从1-30分类到1-10,11-20,21-30的3个桶中进行排序。
合并步骤很简单(与合并排序不同)。只需将每个桶的元素复制回原始数组,或者将每个桶的头部与前一个桶的尾部连接(如果是链接列表)
Radix / base在排序数字时可能是组/存储区的类型/实例。因此,您可以将MSD基数视为桶排序的修改实例
水桶排序非就地,但稳定排序算法。但是,存储桶排序的某些变化可能不稳定(如果使用不稳定的子排序算法)