Exercice 3 (palindromes) :
´
Ecrire des fonctions suivantes sur les listes.
–last : trouve le dernier ´el´ement d’une liste. Si la liste est vide, lever l’ex-
ception Empty list d´efinie pr´ec´edemment.
Exemple : last [12 ;27 ;14] = 14
–drop last : renvoie la liste pass´ee en argument priv´ee du dernier ´el´ement.
Exemple : drop last [12 ;27 ;14] = [12 ;27]
–palindrome : teste si la liste pass´ee en en argument est un palindrome
Exemple : palindrome [] = true, palindrome [1 ;2] = false, palindrome
[1 ;2 ;3 ;2 ;1] = true
Donner une version non-terminale (en utilisant les deux fonctions pr´ec´edentes).
Quelle est la complexit´e de la solution ?
o rev : inverse l’ordre des ´el´ements d’une liste.
Exemple : rev [1 ; 2 ; 3] = [3 ; 2 ; 1].
Donner une version non-terminale (en utilisant les deux fonctions pr´ec´edentes
last et drop last). Quelle est la complexit´e de la solution ? Donner une
version terminale. Quelle est la complexit´e maintenant ?
–palindrome : Donner une version de palindrome non-terminale, en util-
isant la fonction rev d´efinie pr´ec´edemment). Quelle est la complexit´e de
la solution ?
Exercice 4 (tri par insertion) :
Dans cet exercice, nous allons ´ecrire le tri par insertion, sous la forme d’une
fonction op´erant sur des listes d’entiers, c’est-`a-dire ayant le type int list ->
int list.
1. ´
Ecrire une fonction insertion : int -> int list -> int list qui ins`ere
un ´el´ement dans une liste d’entiers suppos´ee tri´ee en ordre croissant.
2. ´
Ecrire une fonction insertion sort : int list -> int list qui r´ealise
le tri par insertion d’une liste d’entiers. On rappelle que cela consiste `a
extraire le premier ´el´ement de la liste, `a trier r´ecursivement le reste de la
liste, puis `a ins´erer l’´el´ement isol´e (avec la fonction insertion).
3. Pour tester votre fonction de tri, ´ecrivez une fonction
is sorted : int list -> bool qui retourne true si la liste pass´ee en
argument est tri´ee dans l’ordre croissant
Exercice 5 (tri rapide) :
Dans cet exercice, nous allons ´ecrire le tri rapide (Quicksort) invent´e par le
chercheur britannique C.A.R. Hoare.
1. ´
Ecrire une fonction partition : int -> int list -> int list * int
list qui prend en argument un entier xet une liste d’entiers let renvoie
une paire de listes (l1,l2) telle que l1 (resp. l2) contient les ´el´ements
de l plus petits (resp. plus grands) que x.
2