使用Python实现基数排序
利用计数排序的稳定性,基于对计数排序的修改和调用实现基数排序
计数排序
前提说明
基数排序要求待排序数组n个元素为d位数的正整数
算法的期望运行时间表示为
O(n)
伪算法
RADIX-SORT(A,d)
for i=1 to d:
use a stable sort to sort array A on digit i
算法
def radixSort(A,d):
‘’‘从最低有效位开始排序解决d位数的排序问题’‘’
for i in range(1,d+1):
D=list(map(lambda x:(x%(10**i))//(10**(i-1)), A))
A=countingSort(A,D)
print(D,A)
def countingSort(A,D):
‘’‘
A为输入数组,D为数组A的第i个有效位数组
对D数组计数排序,然后按排序好的数组一次去A的值
返回按D排序好的数组A’‘’
k=max(D)
n=len(D)
B=[0]*n
C=[0]*(k+1) #生成所有元素为0的临时数组
for i in range(n):
C[D[i]]+=1
for j in range(1,k+1):
C[j]+=C[j-1]
for i in range(n-1,-1,-1):
B[C[D[i]]-1]=A[i]
C[D[i]]-=1
return B
运行结果
radixSort([212,113,311,114,112],3)
[2, 3, 1, 4, 2] [311, 212, 112, 113, 114]
[1, 1, 1, 1, 1] [311, 212, 112, 113, 114]
[3, 2, 1, 1, 1] [112, 113, 114, 212, 311]