程序员算法新手入门必修课: (二) 基数排序

算法入门系列课程: (二) : 基数排序

  1. 谢邀,今天的天气是真的冷,此时有人给自己暖手,是多么的幸福啊,回寝室肝一篇基数排序的博客
  2. 此时还是算法学习前期生涯,还是个小菜鸡,虽然没人看就自己记录一下学习生涯吧!
  3. 下面先贴代码含注释
def radix_sort(array):
    max_num = max(array)  # 数组中的最大值
    # place = 1
    # while max_num > 10*place:
    #     place += 1
    # place 记录此序列位数
    if 0 < max_num < 9: 
        place = 1 # 1位数
    elif 10 < max_num < 99:
        place = 2  # 2位数
    elif 101 < max_num < 999:
        place = 3  # 3位数
    else:
        place = 4  # 因为现在接触的都是小数字最大的就设置为4位数了
    for i in range(place):
        # i从0开始首先排个位数
        # buckets: [[],[],[],[],[],[],[],[].[],[]]
        buckets = [[] for _ in range(10)]  
        for num in array:
            # 循环遍历array里面的元素
            radix = int(num/(10**i) % 10)  # 获取该数的个位数
            # 例如17就放置在buckets第八个列表中(从0开始计数)
            buckets[radix].append(num)  # 放置buckets中
        j = 0  # 从零开始计数
        for k in range(10):
            for num in buckets[k]:
                # 第一次循环排个位数,第二次十位数......
                array[j] = num  # 将buckets列表排好的数字放置array中
                j += 1  
    return array


if __name__ == '__main__':
    array = [25, 17, 33, 17, 22, 13, 32, 15, 9, 25, 27, 18]
    print(radix_sort(array))
  • 基数排序的核心思想就是: 先判断该列表中最大的数字是几位数,如果是两位数的话,则先按个位数排好序列,在按十位数排好序列,则成功完成排序
  • 好啦,本次代码分享就到这里啦!
  • 底蕴的厚度决定人生的高度,csdn博客见证自己的成长!

猜你喜欢

转载自blog.csdn.net/xtreallydance/article/details/111145750