(* Exercice 1 *) let scinder l = let rec aux acc1 acc2 n l = match l with | [] -> (acc1, acc2) | h::t -> if n = 0 then aux (h::acc1) acc2 1 t else aux acc1 (h::acc2) 0 t in aux [] [] 0 l;; scinder [8;5;4;3;1];; let fusionner l1 l2 = let rec aux acc l1 l2 = match (l1,l2) with |([],[]) -> acc |([],h::t) -> aux h::acc [] t |(h::t,[]) -> aux h::acc t [] |(h1::t1,h2::t2) -> if h1>h2 then aux (h2::acc) l1 t2 else aux (h1::acc) t1 l2 in let rec reverse acc l = match l with | [] -> acc | h::t -> reverse (h::acc) t in reverse [] (aux [] l1 l2);; fusionner [5;7;11] [2;4;8;10];; let rec tri_fusion l = match l with |[] -> [] |[a] -> [a] |_ -> let (l1,l2) = scinder l in fusionner (tri_fusion l1) (tri_fusion l2);; tri_fusion [3;1;2;666];; (* Exerice 2 *) let partition k l = let rec aux acc1 acc2 l = match l with |[] -> (acc1,acc2) |h::t -> if h>=k then aux acc1 (h::acc2) t else aux (h::acc1) acc2 t in aux [] [] l;; partition2 2 [3;1;666;2;0;-1];; let rec tri_pivot l = match l with |[] -> [] |h::t -> let (l1,l2) = partition h t in (tri_pivot l1)@(h::(tri_pivot l2));; tri_pivot [3;1;666;2;0;-1];; let a = ref 1;; decr a;; a;;