基本思想
基数排序的总体思路就是将待排序数据拆分成多个关键字进行排序,也就是说,基数排序的实质是多关键字排序
比如说成绩的排序,如果两个人总分相同,则语文高的排在前面,语文成绩也相同则数学高的排在前面
如果对数字进行排序,那么个位、十位、百位就是不同优先级的关键字
操作步骤
(1) 取得数组中的最大数,并取得位数
(2) 建立桶数组
(3) 按位数的大小分别装进不同的桶里
(4) 将原数组清空,将各个桶里的数据依次添加进原列表
(5) 再进行前一位的排序,依次循环,直到排序的位数大于最大值的位数
具体代码
def radix_sort(alist):
# 记录正在对哪一位进行排序,最低位为个位
i = 0
# 最大值的位数
max_num = max(alist)
j = len(str(max_num))
while i < j:
# 建立桶数组,数字为0-9,所以建10个桶
bucket_list = [[]for i in range(10)]
# 按位数的大小分别装进不同的桶里
for num in alist:
bucket_list[int(num/(10**i)%10)].append(num)
#将原列表清空,将各个桶里的数据依次添加进原列表
alist.clear()
for l in bucket_list:
for b in l:
alist.append(b)
# 再进行前一位的排序,依次循环,直到排序的位数大于最大值的位数
i += 1
return alist
radix_sort([334,5,67,345,7,345345,99])