基数排序就是将不同的位数进行 分类-----取出 从而达到不用比较进行排序![](https://i-blog.csdnimg.cn/blog_migrate/f93fcaa79622a75845790ad40ba48bfc.jpeg)
简单的演示:
进行个位数排序:
将第二步分配好的结果按顺序取出,因为是按个位排序的,所以取出来的元素一定是按个位有序的,如图3所示
将元素按十位放入到相应的位置,上一步的数是按个位有序的,现在按十位放入相应的位置,放入之后,对于每个位置而言,都是大数在上面,小数在下面,如图4所示
因为是从小到大排序,将元素从左往右,从下到上依次取出,如图5所示
从而达到排序的结果。
代码:![](https://i-blog.csdnimg.cn/blog_migrate/9119a4ee4b90e3c8780dba965dc4e2e1.gif)
def radix_sort(a):
maxData = a[0] # 记录初始值,用它记住最大值
for i in range(0, len(a)): # 循环数组
if maxData < a[i]: # 如果 后一位>初始值
maxData = a[i] # 进行交换保持相比之后是大的一方
print(maxData)
b = 1 # 记录最大值的位数
while maxData > 10:
b += 1
maxData /= 10 # 除以10来进行降位
print(b)
for index in range(b):
buckets = [[] for _ in range(10)] # 10个桶
for x in a: # 对每一位进行排序
radix = int(x / (10 ** index) % 10) # 得到每位的基数
# 将对应的数组元素加入到相应位基数的桶中
buckets[radix].append(x)
j = 0
for k in range(10): # 有10个桶,取出第几个桶的数字
for num in buckets[k]: # 取出每个桶里的数字
a[j] = num # 放回
j += 1
return a
if __name__ == '__main__':
a = [25, 17, 33, 17, 22, 13, 32, 15, 9, 25, 27, 18]
print(radix_sort(a))
摸鱼失败饱受折磨
排序算法之基数排序_xiaoxi_hahaha的博客-CSDN博客_基数排序怎么排
图是借他的