Python 计数排序实现只能起到一半的作用
我试着用Python实现一个CountingSort程序,它是基于麻省理工学院的“算法简介”,但它只在前几个元素之后才起作用,我不知道为什么Python 计数排序实现只能起到一半的作用,python,sorting,counting,Python,Sorting,Counting,我试着用Python实现一个CountingSort程序,它是基于麻省理工学院的“算法简介”,但它只在前几个元素之后才起作用,我不知道为什么 A = [2, 11, 3, 6, 9, 20, 11, 32, 45, 47, 52, 59] B = [] for x in range(len(A)): B.append(0) C = [] k = max(A) for i in range(0,k+1): C.append(0) for j in range(0,
A = [2, 11, 3, 6, 9, 20, 11, 32, 45, 47, 52, 59]
B = []
for x in range(len(A)):
B.append(0)
C = []
k = max(A)
for i in range(0,k+1):
C.append(0)
for j in range(0, len(A)):
C[A[j]] += 1
for i in range(1,k):
C[i] = C[i] + C[i-1]
#print(C)
for j in range(len(A)):
B[C[A[j]]] = A[j]
C[A[j]] -= 1
print(B)
打印列表:[0、59、3、6、9、11、11、20、32、45、47、52]此代码正在运行,您需要不断检查正在创建和分配的索引
A = [2, 11, 3, 6, 9, 20, 11, 32, 45, 47, 52, 59, 65,2]
B = []
for x in range(len(A)):
B.append(0)
C = []
k = max(A)
for i in range(0,k+1):
C.append(0)
for j in range(0, len(A)):
C[A[j]] += 1
for i in range(1,k+1):
C[i] = C[i] + C[i-1]
#print(C)
for j in range(len(A)):
B[C[A[j]]-1] = A[j]
C[A[j]] -= 1
print(B)
@Brian,嗯,当我们访问索引i-1时,起始值必须至少为1,k等于59,这意味着循环在58之后停止,58应该是C中的最后一个元素。我没有看到我担心的错误:(相反,检查循环4的范围和循环5的主体。注意
len(C)==60
和C[A[j]]
在第一个元素的插槽处变为1
。