Le tri par dénombrement
Exercice · OCaml (option informatique), chapitre 9 — Algorithmique : les tris
Énoncé
Écrire tri_denombrement t k qui trie un tableau d'entiers tous compris entre 0 et k, en , sans aucune comparaison.
Corrigé
let tri_denombrement t k =
let compte = Array.make (k + 1) 0 in
for i = 0 to Array.length t - 1 do
compte.(t.(i)) <- compte.(t.(i)) + 1
done;
let resultat = Array.make (Array.length t) 0 in
let pos = ref 0 in
for v = 0 to k do
for _j = 1 to compte.(v) do
resultat.(!pos) <- v;
pos := !pos + 1
done
done;
resultat
On compte les occurrences de chaque valeur (compte.(v)), puis on réécrit chaque valeur v autant de fois qu'elle apparaît, dans l'ordre croissant. Aucune comparaison : on exploite que les valeurs sont des indices possibles. C'est plus rapide que , mais au prix d'une hypothèse forte (entiers bornés) et d'un tableau auxiliaire de taille .
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.