美文网首页
2.7 算法 --13 基数排序

2.7 算法 --13 基数排序

作者: 寒暄_HX | 来源:发表于2020-03-06 11:03 被阅读0次

算法子目录:https://www.jianshu.com/p/02492be3c5f5

基数排序示意图

思路

基数排序的原理就是按照将每个元素的从低到高的顺序依次取出各位上的元素,然后每次按照取出的元素进行归类和重整。直到所有的位数都排完。简单的将就是先拆分后整合。这里并不能先排第一位,那样最后依然是无序。

代码

import random
from cat_time import cal_time

@cal_time
def radix_sort(nums):
    mod = 10
    div = 1
    mostBit = len(str(max(nums)))  # 最大数的位数决定了外循环多少次
    buckets = [[] for row in range(mod)] # 构造 mod 个空桶
    while mostBit:
        for num in nums:  # 将数据放入对应的桶中
            buckets[num // div % mod].append(num)
        i = 0  # nums 的索引
        for bucket in buckets:  # 将数据收集起来
            while bucket:
                nums[i] = bucket.pop(0) # 依次取出
                i += 1
        div *= 10
        mostBit -= 1
    return nums

li = list(range(10000))
random.shuffle(li)
radix_sort(li)

总结

基数排序本质上时桶排序的一次应用。
平均时间复杂度:O(nk)
最坏时间复杂度:O(nk)
空间复杂度:O(n+k)
是一种稳定排序。

相关文章

网友评论

      本文标题:2.7 算法 --13 基数排序

      本文链接:https://www.haomeiwen.com/subject/bjyvrhtx.html