Code source du tri par "creation"
let position_suivant tableau pos_dernier maxi=
let longueur=Array.length tableau and val_dernier=tableau.(pos_dernier)
and pos_suivant=ref(-1) and val_suivant=ref(maxi) in
let i=ref(0) in
while(!i<longueur) do
if(tableau.(!i)=val_dernier & (!i)>pos_dernier) then
begin
pos_suivant:=(!i);
i:=longueur-1;
end;
if (tableau.(!i)>val_dernier && tableau.(!i)<(!val_suivant)) then
begin
val_suivant:=tableau.(!i);
pos_suivant:=(!i);
end;
if(tableau.(!i)=maxi && (!pos_suivant)=(-1)) then
pos_suivant:=(!i);
i:=(!i)+1;
done;
(!pos_suivant);;
(* val position_suivant : 'a array -> int -> 'a -> int = <fun> *)
let tri_creation tableau=
let longueur=Array.length tableau in
let result=Array.make longueur 0
and mini=ref(tableau.(0)) and maxi=ref(tableau.(0)) and pos_dernier=ref(0) in
for i=1 to longueur-1 do
if tableau.(i)<(!mini) then
begin
mini:=tableau.(i);
pos_dernier:=i;
end;
if tableau.(i)>(!maxi) then maxi:=tableau.(i);
done;
result.(0)<-(!mini);
for i=1 to longueur-1 do
pos_dernier:=(position_suivant tableau (!pos_dernier) (!maxi));
if !pos_dernier<>(-1) then
result.(i)<-tableau.(!pos_dernier)
else
failwith "Erreur dans le triParCreation : l'un des éléments a été perdu !!!";
done;
result;;
(* val tri_creation : int array -> int array = <fun> *)