Code source du tri "bulle"

let tri_bulle tableau=
  let longueur=Array.length(tableau) and inversion=ref(true) in
  
  while(!inversion) do
    inversion:=false;
    
    for i=0 to (longueur-2) do
      if (tableau.(i)>tableau.(i+1)) then
        begin
          echanger tableau i (i+1);
          inversion:=true;
        end;
    done;     
  done;;
(* val tri_bulle : 'a array -> unit = <fun> *)
  
let tri_bulle_optimise tableau=
  let longueur=ref(Array.length(tableau)) and inversion=ref(true) in
  
  while(!inversion) do
    inversion:=false;
    
    for i=0 to (!longueur-2) do
      if (tableau.(i)>tableau.(i+1)) then
        begin
          echanger tableau i (i+1);
          inversion:=true;
        end;
    done;
    longueur:=(!longueur)-1;     
  done;;
(* val tri_bulle_optimise : 'a array -> unit = <fun> *)