基数排序

题目内容:

实现一个基数排序算法,用于10进制的正整数从小到大的排序。

思路是保持10个队列(队列0、队列1…队列9、队列main),开始,所有的数都在main队列,没有排序。

第一趟将所有的数根据其10进制个位(09),放入相应的队列09,全放好后,按照FIFO的顺序,将每个队列的数合并排到main队列。

第二趟再从main队列队首取数,根据其十位的数值,放入相应队列0~9,全放好后,仍然按照FIFO的顺序,将每个队列的数合并排到main队列。

第三趟放百位,再合并;第四趟放千位,再合并。

直到最多的位数放完,合并完,这样main队列里就是排好序的数列了。

输入格式:

一个列表mylist,其中mylist包含一些需要排序的正整数,正整数互不相同且均不超过100000,且个数在1至1000之间。

输出格式:

一个与mylist等长的列表。

输入样例:

[8, 91, 34, 22, 65, 30, 4, 55, 18]

输出样例:

[4, 8, 18, 22, 30, 34, 55, 65, 91]
代码:

class Queue:
    def __init__(self):
        self.items = []
        
    def isEmpty(self):
        return self.items == []
    
    def enqueue(self, item):
        self.items.insert(0, item)
        
    def dequeue(self):
        return self.items.pop()
    
    def size(self):
        return len(self.items)
import math
def RadixSort(mylist):
    K = int(math.ceil(math.log(max(mylist), 10))) + 1 #需要进行几次排序
    bucket = [Queue() for i in range(10)]
    for i in range(1, K+1):
        for val in mylist:
            bucket[int((val/10**(i-1))%10)].enqueue(val)
        del mylist[:]
        for queue in bucket:
            while not queue.isEmpty():
                mylist.append(queue.dequeue())
    return mylist
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值