天天看点

Pycharm实行按规律基数排序算法排序python源码

基数排序(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