今天我用了python来写排序算法中的基数排序。
这里给大家简单讲讲它的算法思路(看下图),首先看要基数排序序列中最大数的位数有几位,我们要用这个位数来创建几个二维表。首先先算出序列中的各个个位的值,然后按照个位值找到互相对应的桶中,比如164个位为4,将164放在第一个循环数组的下标为4的行中。放完以后可以得到下图中的第一图,再计算各个数字的十位,如果没有十位了则直接放在下标为0的行中,入第二图中的5。以此类推,几位数全部都算好以后一定会得到类似下图的第三图的结果,排序好的数据都在最后一个数组的下标为0的行中,剩下的扫描整个数组都可以得到排序好的顺序,这也就是基数排序的基本思想。代码实现如下:
'''
基数排序
基数:0/1
要排序的数组中最大值的位数(对于数字不足的位,补0)
0,1,2,3,4,5,6,7,8,9 ->桶
按位取值,放入对应的桶中
'''
print('\n\n\n')
print('*******************************************')
print('基数排序算法')
from random import randint
def RadixSort( arr,d ):
for k in range(d): #d为最大数的位数 0,1,2
s=[ [] for i in range(10) ]
for i in arr:
# /结果为float 结果为int
s[ i//(10**k)%10 ].append(i) #比如345,k为此时的位数 0表示个位 通过 i//(10**K)%10就可以取到个位,在插入到第一的数组中
arr = [ j for i in s for j in i ]
return arr
if __name__=='__main__': #主函数
a = [randint(1,999) for i in range(10)] #列表推到论
print('待排序列:',a)
# max(集合) ->去最大数
# str(数字) ->转成字符串
# len(字符串) ->取长度
num = len( str(max(a)) ) #取出集合中最大值的位数
a = RadixSort(a,num)
print('排序以后的数组为',a)
输出结果如下: