(* ===================================================== *)
(* Apprentissage de la programmation avec OCaml *)
(* Catherine Dubois & Valérie Ménissier-Morain *)
(* Éditions Hermès Sciences *)
(* Mars 2004 *)
(* ===================================================== *)
(* Fichier MLSRC/Tris_vecteurs/fusion_vecteur.ml *)
(* ===================================================== *)
let fusion t début fin t1 début1 fin1 t2 début2 fin2 =
let i1 = ref début1
and i2 = ref début2 in
let i = ref début in
while !i1 <= fin1 && !i2 <= fin2 do
if t1.(!i1) <= t2.(!i2)
then (t.(!i) <- t1.(!i1); incr i1)
else (t.(!i) <- t2.(!i2); incr i2);
incr i;
done;
if !i1 <= fin1
then Array.blit t1 !i1 t !i (fin1 - !i1+1)
else Array.blit t2 !i2 t !i (fin2 - !i2+1);;
let rec tri_fusion_rec t t' début fin =
if fin > début
then
begin
let début1 = début
and fin1 = début+(fin-début)/2 in
let début2 = fin1+1
and fin2 = fin in
tri_fusion_rec t' t début1 fin1;
tri_fusion_rec t' t début2 fin2;
fusion t début fin t' début1 fin1 t' début2 fin2
end;;
let tri_fusion t =
tri_fusion_rec t (Array.copy t) 0 (Array.length t-1);;
Ce document a été traduit de LATEX par
HEVEA.