📅  最后修改于: 2023-12-03 15:07:32.401000             🧑  作者: Mango
商-余数排序(商排序或Radix sort)是一种根据数字中的不同位数来排序的算法。它通过将数字分成商和余数两部分,然后以余数为依据排序,重复这个过程直到所有位数都使用过为止。商-余数排序可以适用于基于数字的数据集合。
对于每一位进行排序,可以使用桶排序、计数排序或基数排序。
先将基数从最低位开始比较并排序,再进行更高位的排序,直至所有的位数都比较完。
radix-sort(A, d) // d表示最高位数,A为数组
for i = 1 to d
do using stable-sort to sort array A on digit i
end for
def radix_sort(nums):
digit = 0
max_digit = max(nums)
while max_digit:
max_digit //= 10
digit += 1
for i in range(1, digit+1):
bucket_list = [[] for _ in range(10)]
for j in range(len(nums)):
bucket_list[nums[j]//(10**(i-1)) % 10].append(nums[j])
nums.clear()
for j in range(10):
nums += bucket_list[j]
return nums
最好时间复杂度:O(n*k)
最坏时间复杂度:O(n*k)
平均时间复杂度:O(n*k)
其中k是关键字基数(一般为10),n是数组长度。