排序算法之基数排序

Posted shenjianping

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法之基数排序相关的知识,希望对你有一定的参考价值。

一、原理

  基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。

步骤:

(1)创建10个桶(列表)分别给每一个数位

(2)遍历每个数位

(3)遍历列表中的每个元素,并将它放到相应的桶中

(4)将元素恢复至列表中

 技术图片

二、实现

import random


def list_to_bucket(li, i):
    bins = [[] for i in range(10)]  # 创建10个桶(列表)分别给每一个数位
    for num in li:
        j = num // (10**i) % 10  
        bins[j].append(num)
    return bins


def bucket_to_list(bins):
    return [i for bin in bins for i in bin]


def radixSort(li):
    max_num = max(li)
    i = 0
    while 10 ** i <= max_num:  # 循环每一次就比较每一个数的每一位
        bins = list_to_bucket(li, i)
        li = bucket_to_list(bins)
        i += 1
    return li


li = [random.randint(0, 200) for i in range(10000)]
radixSort(li)
print(radixSort(li))

参考:

https://github.com/hustcc/JS-Sorting-Algorithm/blob/master/10.radixSort.md

https://visualgo.net/zh/sorting

以上是关于排序算法之基数排序的主要内容,如果未能解决你的问题,请参考以下文章

十大经典排序之:基数排序 |计数排序

排序算法之基数排序

排序算法之基数排序

基础排序算法之基数排序

排序算法之基数排序

排序算法之JAVA基数排序算法