(* Exercice 1 *)
(* 1 *)
let selection t = 
	let rec maxi fin =
		if fin = 0 then
			0
		else
			begin
			let m = maxi (fin - 1) in
			if t.(fin) > t.(m) then
				fin
			else
				m
			end in

	let rec aux fin = 
		if fin = 0 then ()
		else
			begin
			let f = t.(fin) in
			let m = maxi fin in
			t.(fin) <- t.(m);
			t.(m) <- f;
			aux (fin - 1)
			end in

	aux (Array.length t - 1);;

let a = [|1;4;2;-1;2;3;4;2;9|];;
selection a;;
a;;
(* 2 *)
(* Dans le pire des cas, la fonction effectuera en tout n! comparaisons *)
(* 3 *)
(* Dans le meilleur des cas, la fonction effectuera également n! comparaisons *)

(* Exercice 2 *)
let rec min_liste l = match l with
	| [] -> failwith "La liiste estttt"
	| [a] -> (a, [])
	| h::t -> 
		let m, l = min_liste t in
		if h < m then
			(h, t)
		else
			(m, h::l);;
min_liste [4;2;4;1;5];;
let rec l_selection l = match l with
	| [] -> []
	| [a] -> [a]
	| _ -> let m, lst = min_liste l in m::(l_selection lst);;
l_selection [1;2;6;7;3;2;-6;3];;

let rec insertion l = match l with
	