def counting_sort(array):
max_elem=max(array)
counts=[0 for i in range(max_elem+1)]
for elem in array:
counts[elem]+=1
print(counts)
return [i for i in range(len(counts)) for cnt in range(counts[i])]
array=[2,4,3,0,2,4,6,3,2,3,2,1,2,1,0]
result=counting_sort(array)
print(result)
Out:
[2, 2, 5, 3, 2, 0, 1]
[0, 0, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 6]
#Counting Sort by Given Rank
def counting_sort_by(array,max_rank=None,rank=lambda x:x):
if max_rank is None:
max_rank=0
for elem in array:
if rank(elem)>max_rank:
max_rank=rank(elem)
counts=[[] for cnt in range(max_rank +1)]
for elem in array:
(counts[rank(elem)]).append(elem)
print(counts)
return [elem for sublist in counts for elem in sublist]
array=[2,4,3,0,2,4,6,3,2,3,2,1,2,1,0]
result=counting_sort_by(array,max_rank=None,rank=lambda x:x)
print(result)
Out:
[[0, 0], [1, 1], [2, 2, 2, 2, 2], [3, 3, 3], [4, 4], [], [6]]
[0, 0, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 6]