Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计数排序实现只能起到一半的作用_Python_Sorting_Counting - Fatal编程技术网

Python 计数排序实现只能起到一半的作用

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,

我试着用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, 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