Exercice 3 Tri Fusion
Le tri fusion est un algorithme de type “Diviser pour r´egner”. Il repose sur le fait que la fusion
de deux tableaux tri´es est rapide, comme nous l’avons vu dans l’exercice pr´ec´edent.
L’algorithme s’effectue r´ecursivement de la mani`ere suivante :
– si le tableau a une seule case, il est tri´e
– sinon on d´ecoupe le tableau en deux parties de mˆeme taille (ou `a une case pr`es si la taille est
impaire)
– on trie ces deux parties
– on fusionne les parties tri´ees.
1. Ecrire une m´ethode public static int[] division(int[] tab, int i, int j) re-
tournant un tableau de longueur j−i+ 1 contenant les valeurs de tab entre les valeurs i
et jincluses. Quelle est sa complexit´e ?
2. En utilisant les m´ethodes fusion et division, ´ecrire une m´ethode r´ecursive public
static int[] trifusion(int[] tab) qui retourne le tableau tab tri´e dans l’ordre crois-
sant selon l’algorithme sp´ecifi´e. Tester le programme.
3. Quelle est la complexit´e totale de l’algorithme ? Comparer avec les versions pr´esent´ees en
cours : quelles sont les diff´erences ? quelles sont les versions les plus efficaces ?
4. Comparer les diff´erents tris vus en cours (`a bulle, s´election, insertion,tri fusion, tri rapide) :
lesquels sont les plus rapides ? quelles sont leurs caract´eristiques ?
Exercice 4 Tri Shaker (Exercice optionnel)
On se propose dans cet exercice d’am´eliorer le tri `a bulle en faisant les modifications suivantes :
– limiter les parcours sans ´echanges.
– m´emoriser le plus grand indice `a partir duquel les ´echanges ne se font plus, c’est `a dire l’indice
en dessous du quel le tableau est tri´e.
– alterner les sens des parcours cons´ecutifs afin de traiter le cas o`u les ´el´ements mal plac´es se
trouvent en d´ebut de tableau.
Utiliser les trois remarques pr´ec´edentes pour ´ecrire un algorithme am´eliorant le tri `a bulle. Ce
tri s’appelle tri shaker.
Exercice 5 R´ecursivit´e crois´ee
1. ´
Ecrire deux m´ethodes Droit et Penche mutuellement r´ecursives qui permettent, dans un
environnement graphique, de construire les deux figures suivantes (on utilisera la fonction
Deug.drawLine(x1,y1,x2,y2)) :
2. Et avec une seule m´ethode r´ecursive ?
2