python语言小程序——排序算法3(基数排序)

今天我用了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)


输出结果如下:


猜你喜欢

转载自blog.csdn.net/jjboom425/article/details/79718323