以下内容是个人学习笔记的整理。
原理:
桶排序思想。
步骤:
- 确定要比较的轮数;
- 建立相应的桶;
- 按照数据的个位,十位,百位把数据对应位的数放入相应的桶;
- 桶内排序;
- 从桶内取出数据,组成完整的有序序列。
实现代码(python):
def radix_sort(alist):
'基数排序'
if len(alist) <= 1:
return alist
#n代表要比较的几轮
n = len(str(max(alist)))
for i in range(n):
temp = [[] for _ in range(10)] #数字都是0~9,所以开辟10个桶
for j in alist:
temp[j // (10**i) % 10].append(j) #个位,十位,百位进行排序
alist = [k for i in temp for k in i] #列表推导式,会新建一个列表
#相当于
#res_list = []
#for i in temp:
#for k in i:
#res_ist.append(k)
return alist
复杂度分析:
-空间复杂度
空间复杂度为O(n)
-时间复杂度
–最优时间复杂度:O(n)
–最坏时间复杂度:O(nlogn)
–平均时间复杂度:O(n)
是否属于原地排序算法:
不是一种原地排序算法
稳定性:
稳定
适应范围:
数据可以划分高低位,而且每位数据范围不能太大。