此算法描述
此算法特性
此算法适用场景
代码
def CountingSort(arr):
max_value = max(arr) # 列表中的最大值
min_value = min(arr) # 列表中的最小值
template_arr =[0]*len(arr) # 储存元素个数信息
res_arr = [0]*len(arr) # result_list
for value in arr: # 计算列表中每个元素出现的次数
template_arr[value-min_value] = template_arr[value-min_value] + 1
for now_local in range(1,len(arr)): # 计算此元素之前的个数(包括此元素: 90 90 91. 那么91就是出现了三次).
template_arr[now_local] = template_arr[now_local] + template_arr[now_local-1]
print(template_arr)
for i in range(len(arr)-1,-1,-1):
# 倒序进行对比.这么做的原因是: [90 91 91 92]. 那么第二个91是第三名.
res_arr[ template_arr[ arr[i]- min_value ]-1 ] = arr[i]
'''
arr[i]- min_value : 此元素在list中处于第几名.
template_arr[ arr[i]- min_value ] : 此元素前面有多少个元素
res_arr[ template_arr[ arr[i]- min_value ]-1 ] : 减一是因为 前面有的元素个数也包括此元素本身
'''
template_arr[arr[i]-min_value]-=1
return res_arr
print(CountingSort([7,5,4,4]))