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