首页 文章

bucket sort和radix排序有什么区别?

提问于
浏览
42

铲斗分类和基数排序是近亲; bucket sort从MSD到LSD,而radix sort可以同时进入“方向”(LSD或MSD) . 两种算法如何工作,特别是它们有何不同?

2 回答

  • 19

    RadixSortBucketSort 的初始传递完全相同 . 元素放在增量范围的 buckets (或 bins )中(例如0-10,11-20,... 90-100),具体取决于最大数字中的位数 .

    但是,在下一个传递中, BucketSort 将这些'buckets'命令并将它们附加到一个数组中 . 但是, RadixSort 在没有进一步排序的情况下附加存储桶,并且基于第二个数字(10个's place) of the numbers. Hence, BucketSort is more efficient for '密集'数组),而RadixSort可以很好地处理稀疏(井,不完全是稀疏但间隔开)的数组 .

  • 40

    Bucket Sort和Radix Sort就像姐妹排序算法,因为它们不是比较排序,一般的想法是类似的 . 而且,它们在实现中都有点抽象 .

    Radix Sort

    • 基数表示 base (二进制,八进制,十进制等) . 因此,此排序用于数字(也用于字符串) . 这适用于每个元素E都像ek ... e2e1e0,其中ei在某个范围内 . (通常为0到十进制的基数,如十进制的0-9或ASCII字符的0-255)

    • 然后使用稳定子排序算法的k遍(它 has to be stable 或其他基数排序不起作用)来对数字进行排序 . 这种子排序算法通常也是Counting sort或Bucket sort,但 it cannot be Radix sort itself .

    • 您可以从最高有效数字或最低有效数字开始,因为每次传递中的 it shuffles every number (从k到0或0到k)

    • 这是一种 stable 排序算法 .

    Bucket Sort:

    • 它将数组分成 smaller groups or buckets 并使用子排序算法或递归调用它们单独对它们进行排序,然后 combines the result . 例如,通过添加到他们团队的桶中对玩家进行排序,然后根据他们的球衣号码或者将数字从1-30分类到1-10,11-20,21-30的3个桶中进行排序 .

    • combine step is trivial (与合并排序不同) . 只需将每个桶的元素复制回原始数组,或者将每个桶的头部与前一个桶的尾部相连(如果是链接列表)

    • Radix / base在排序数字时可能是组/桶的 a type/instance . 因此,您可以将MSD基数视为桶排序的修改实例

    • Bucket sort是 not in-placestable 排序算法 . 但是,存储桶排序的某些变化可能不稳定(如果使用不稳定的子排序算法)

相关问题