(* ===================================================== *)
(* Apprentissage de la programmation avec OCaml *)
(* Catherine Dubois & Valérie Ménissier-Morain *)
(* Éditions Hermès Sciences *)
(* Mars 2004 *)
(* ===================================================== *)
(* Fichier MLSRC/Tris_listes/test_insertion_liste.ml *)
(* ===================================================== *)
open Unix;;
open Insertion_liste;;
(* Les fonctions de génération de liste *)
(* n -> 1 *)
let rec ordre_décroissant n =
if n =1 then [1] else n::(ordre_décroissant (n-1));;
(* 1 -> n *)
let ordre_croissant n = List.rev (ordre_décroissant n);;
let épi n =
let rec épi_rec d f =
if d < f then d::f::(épi_rec (d+1) (f-1)) else [d] in
épi_rec 1 n;;
let rec aléatoire n = if n = 0 then [] else (Random.int n)::(aléatoire (n-1));;
(* Les fonctions de test *)
let tri_liste_triée n nb =
let l = (ordre_croissant n) in
let t1 = Unix.times () in
for i = 1 to nb do tri_insertion l; done;
let t2 = Unix.times () in
Printf.printf " déjà triée par ordre croissant: %.4f secondes\n"
((t2.tms_utime -. t1.tms_utime)/.(float_of_int nb));;
let tri_liste_en_épi n =
let l = (épi n) in
let t1 = Unix.times () in
tri_insertion l;
let t2 = Unix.times () in
Printf.printf " en épi : %.4f secondes\n"
(t2.tms_utime -. t1.tms_utime);;
let test_insertion_aleatoire n nb =
let t1 = Unix.times () in
for i = 1 to nb do
let l = (aléatoire n) in
tri_insertion l;
done;
let t2 = Unix.times () in
Printf.printf " aléatoire moyennée : %.4f secondes\n"
((t2.tms_utime -. t1.tms_utime)/.(float_of_int nb));;
let tri_liste_triée_ordre_inverse n =
let l = (ordre_décroissant n) in
let t1 = Unix.times () in
tri_insertion l;
let t2 = Unix.times () in
Printf.printf " triée par ordre décroissant : %.4f secondes\n"
(t2.tms_utime -. t1.tms_utime);;
(* Les tests *)
print_endline "Liste de 10000 éléments";
tri_liste_triée 10000 10000;
tri_liste_en_épi 10000;
test_insertion_aleatoire 10000 10;
tri_liste_triée_ordre_inverse 10000;;
print_endline "\nListe de 20000 éléments";
tri_liste_triée 20000 1000;
tri_liste_en_épi 20000;
test_insertion_aleatoire 20000 10;
tri_liste_triée_ordre_inverse 20000;;
print_endline "\nListe de 40000 éléments";
tri_liste_triée 40000 100;
tri_liste_en_épi 40000;
test_insertion_aleatoire 40000 10;
tri_liste_triée_ordre_inverse 40000;;
Ce document a été traduit de LATEX par
HEVEA.