Code source du tri par "creation"

let position_suivant tableau pos_dernier maxi=
  let longueur=vect_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);;
(* position_suivant : 'a vect -> int -> 'a -> int = <fun> *)
  
let tri_creation tableau=
  let longueur=vect_length tableau in
  let result=make_vect 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;;
(* tri_creation : int vect -> int vect = <fun> *)