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.