Code source du tri "bulle"

let rec tri_bulle liste=
  let rec parcours liste=
    match liste with
    |[]->(false,liste)
    |t::[]->(false,liste)
    |t::q->let (echange,resultat)=parcours q in
           if (hd resultat)>=t then
             echange,t::resultat
           else
             true,(hd resultat)::t::(tl resultat) in
  match liste with
  |[]->liste;
  |_->let (modifie,liste2)=parcours liste in
      if modifie then tri_bulle liste2 else liste;;
(* tri_bulle : 'a list -> 'a list = <fun> *)
     
let rec tri_bulle_optimise liste=
  let rec parcours liste=
    match liste with
    |[]->(false,liste)
    |t::[]->(false,liste)
    |t::q->let (echange,resultat)=parcours q in
           if (hd resultat)>=t then
             echange,t::resultat
           else
             true,(hd resultat)::t::(tl resultat) in
  match liste with
  |[]->liste;
  |_->let (modifie,liste2)=parcours liste in
      if modifie then (hd liste2)::(tri_bulle (tl liste2)) else liste;;
(* tri_bulle_optimise : 'a list -> 'a list = <fun> *)