python - 计数排序实现只工作了一半
问题描述
我尝试根据麻省理工学院的“算法简介”在 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)
推荐阅读
- crystal-reports - Crystal Reports 在节中重复组标题
- visual-studio - Visual Studio SSRS 项目文件错误:该项目需要用户输入。重新加载项目以获取更多信息
- sql - 如何在 BigQuery(标准 SQL)中获取表的前 N%(例如,50%)?
- java - 正则表达式java:replaceAll空格,连字符之间除外
- javascript - Firebase:初始化由集合组成的树
- kubernetes - 如何跨多个 Kubernetes 集群扩展 RabbitMQ
- mysql - SQL查询从wordpress数据库中删除重复的postmeta
- node.js - 使用passport-saml将浏览器重定向到登录页面
- c++ - 将 BGR 图像转换为 jpeg 格式的 base64 字符串
- list - 列表中的视觉序言重复