Code source du tri "casiers"
let tri_casier tableau=
let longueur=Array.length(tableau) in
if longueur>0 then
begin
let mini=ref(tableau.(0)) and maxi=ref(tableau.(0)) in
for i=1 to (longueur-1) do
if (!mini)>tableau.(i) then mini:=tableau.(i);
if (!maxi)<tableau.(i) then maxi:=tableau.(i);
done;
let longueur2=(!maxi-(!mini)+1) in
let tableau_bis=Array.make longueur2 0 in
for i=0 to (longueur-1) do
tableau_bis.(tableau.(i))<-tableau_bis.(tableau.(i))+1;
done;
let compteur=ref(0) in
for i=0 to (longueur2-1) do
while tableau_bis.(i)>0 do
tableau.(!compteur)<-i;
compteur:=(!compteur)+1;
tableau_bis.(i)<-tableau_bis.(i)-1;
done;
done;
end;;
(* val tri_casier : int array -> unit = <fun> *)