Counting sort
Il counting sort consiste nel salvare in un il numero di occorrenze degli elementi, assumendo che:
I valori degli elementi da ordinare vanno da a
counting(Array A, int k)
B = []
C = [] // Valori da 0 a k rappresentati da indici da 1 a k+1
for i = 0 to k
C[i+1] = 0
for j = 1 to A.length
C[A[j]+1]++
for i = 1 to k
C[i+1] += C[i] // Trasforma i conteggi in indici per B
for j = A.length down to 1
B[C[A[j]+1]] = A[j]
C[A[j]+1]--
return B
Con le somme prefisse del terzo ciclo, su C
in posizione c'è il numero di elementi in A
con valori .
Inoltre, C[A[j]+1]
viene decrementato per poter posizionare elementi uguali in posizioni precedenti.
La complessità è , e viene spesso usato quando .
Partendo dal fondo e decrementando i valori su C
, ci si assicura che l'algoritmo sia stabile.