给定一个列表,获取列表中最大的元素有多少位,依次按照 个位,十位,百位...... 进行排序,对所有的位置都进行排序以后,可以得到最终已经排好序的序列。
#!/usr/bin/python
#encoding=utf-8
import math
def Radix_Sort(res, radix=10):
u"a为整数列表, radix为基数"
# 获取最大的位数
K = int(math.ceil(math.log(max(res), radix))) # 用K位数可表示给定的任意整数
for i in range(1, K+1): # K次循环,依次对应:个位,十位,百位......
# bucket 数组长度为10,存储对应的10个数字
bucket = [[] for j in range(radix)] # 不能用 [[]]*radix
for val in res:
# 获取第i位上面的数字 val%(radix**i)/(radix**(i-1))
bucket[val%(radix**i)/(radix**(i-1))].append(val) # 析取整数第K位数字(从低到高)
# 把a列表删除
del res[:]
# 把bucket列表中的元素重新放入a列表中
for each in bucket:
res.extend(each) # 桶合并
return res
if __name__ == "__main__":
res = [95, 45, 15, 78, 814, 51, 24, 12]
print Radix_Sort(res, 10)