首页 > 编程语言 > 详细

python 基数 计数 排序

时间:2019-10-08 18:18:11      阅读:91      评论:0      收藏:0      [点我收藏+]
#!/usr/bin/python
# 基数排序
# 将列表中的数按照基数进行排序 先排序个位的数 在排序十位的 依次类推可以
def radix_sort(li):
    max_mun = max(li) #确定列表中最大的值
    it = 0
    while 10 ** it <= max_mun: #按照最大的数的位数进行循环 10 ** it 当it = 1时 10 ** it 表示次方 10的1次方
        buckets = [[] for _ in range(10)] #生成10个桶(列表)
        for var in li:
            digit = (var // 10 ** it) % 10 # 将列表中的数进行分桶 进行数的除法和取余可以获得数值的个位数
            buckets[digit].append(var)
        
        li.clear() #清空列表 
        
        for buc in buckets: 
            li.extend(buc) # 将数放回到原来列表
               
        it += 1


————————————————————
#!/usr/bin/python
# 计数排序
# 对列表进行排序,已知列表中的值的数都在0-100之间
def count_sort(li,max = 100):
    count_list = [0 for _ in range(max+1)] #生成一个0到100的长度的列表 用来存放原来列表的值
    for val in range(li): #循环原来列表,将新列表中的相同的数值进行加1 
        count_list[val] += 1

    li.clear() # 清空原来列表 不使用新的内存 节省空间

    for ind,val in enumerate(count_list): # 循环新的列表。取出值和下标
        for i in range(val): #循环每个数出现的次数
            li.append(ind) # 将出现的数放进列表 

#时间复杂度为 O(n) 但是存在使用条件 , 和列表中的数值范围相关

python 基数 计数 排序

原文:https://www.cnblogs.com/ikai/p/11636366.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!