Python全系列 教程
3567个小节阅读:5929.6k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
基数排序(radix sort)利用数字各位之间的递进关系排序的算法,原理是依次对每一位进行排序,从而得到最终的排序结果
取得数组中的最大数,并取得位数;
从最低位开始取每个位的数据,组成基数数组;
将基数组数据填充到原数组;
反复第2,3步。 第2部每轮向前取一位数,反复取到最高位结束
xxxxxxxxxx
def jishu_sort(array):
#获取最多需要被排序几次
times=len(str(max(array)))
for i in range(times):
#分配
bukt=[[] for _ in range(10)]
for eachnum in array:
weishu=eachnum//(10**i)%10
bukt[weishu].append(eachnum)
#收集
array.clear()
for i in range(10):
array+=bukt[i]
print(array)
if __name__ == '__main__':
array=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]
jishu_sort(array)
时间复杂度为 $ O(nk) $:设数据量为 $n$、数据为 $d$ 进制、最大位数为$k$ ,则对某一位执行计数排序使用 $ O(n+d) $ 时间,排序所有 $ k $ 位 使用 $ O((n+d)k)$ 时间。通常情况下,$d$ 和 $k$ 都相对较小,时间复杂度趋向 $ O(n) $ 。
空间复杂度为$ O(n+d) $、非原地排序:与计数排序相同,基数排序需要借助长度为 $ n$ 和 $d$ 的数组 res
和 counter
。
稳定排序:当计数排序稳定时,基数排序也稳定;当计数排序不稳定时,基数排序无法保证得到正确的排序结果。
提示
基数排序也不是只能使用于整数
实时效果反馈
1. 关于基数排序算法,说法正确的是?
A 基数排序需要俩俩比较完整的数据
B 基数排序需要分配10个额外空间辅助排序
C 基数排序只能对整数排序
答案
1=>B