Code source du tri "casiers"
let tri_casier tableau=
let longueur=vect_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=make_vect 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;;
(* tri_casier : int vect -> unit = <fun> *)