基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog®m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。
基数排序的发明可以追溯到1887年赫尔曼·何乐礼在打孔卡片制表机(Tabulation Machine)上的贡献。它是这样实现的:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。
Pycharm实行按规律基数排序算法排序python源码如下:
# 基数排序算法
def radix_sort(arr):
i = 0 # 记录当前正在排拿一位,最低位为1
max_num = max(arr) # 最大值
j = len(str(max_num)) # 记录最大值的位数
while i < j:
bucket_list =[[] for _ in range(10)] #初始化桶数组
for x in arr:
bucket_list[int(x / (10**i)) % 10].append(x)
# 找到位置放入桶数组
arr.clear()
for x in bucket_list:
# 放回原序列
for y in x:
arr.append(y)
i += 1
return arr
if __name__ == '__main__':
Li = [9, 82, 17, 6, 5, 4, 3, 2, 11, 85, 6, 36, -2, -34, 29,1,22]
print("source is:", Li)
result = radix_sort(Li)
print("sort01 is:", result)
print("sort02 is:", result[::-1])
运行效果如图:
source is: [9, 82, 17, 6, 5, 4, 3, 2, 11, 85, 6, 36, -2, -34, 29, 1, 22]
sort01 is: [1, 2, 3, 4, 5, 6, 6, -2, 9, 11, 17, 22, 29, 36, -34, 82, 85]
sort02 is: [85, 82, -34, 36, 29, 22, 17, 11, 9, -2, 6, 6, 5, 4, 3, 2, 1]
Process finished with exit code 0
参考来源:
https://blog.csdn.net/weixin_41571493/article/details/81875088
https://blog.csdn.net/aiya_aiya_/article/details/79846380
https://www.cnblogs.com/woider/p/6835466.html
http://python.jobbole.com/82270