Ten algorytm jest przecież tutaj opisany dość klarownie: https://pl.wikipedia.org/wiki/Sortowanie_przez_zliczanie
l = [0, 3, 2, 3, 3, 3]
res = list()
for i, el in enumerate([l.count(i) for i in range(min(l), max(l)+1)]):
res.extend(el*[i])
print(res) # [0, 2, 3, 3, 3, 3]
Pewnie da się to zrobić jeszcze wydajniej, ale zakładam, że nie o to chodzi.