Universit´e Paris 7 - Denis Diderot IF2 : Structures de donn´ees et Objets JAVA
L1 Sciences Ann´ee 2008-2009, 2`eme semestre
TP n4
Algorithmes de Tri, la suite
Ce TP compl`ete le TP3. Le but est de manipuler des algorithmes de tri vus en cours et de
comparer leur efficacit´e.
Comme dans le TP3 on se donne `a chaque fois un tableau d’entiers et le probl`eme consiste `a
modifier l’ordre des ´el´ements de telle sorte qu’ils soient tri´es apr`es l’application de l’algorithme.
Exercice 1 Tri Bulle
Le principe d’une ´etape du tri bulle est le suivant : on dispose d’un tableau Td’entiers de taille
n. On compare les ´el´ements deux `a deux et si celui de gauche est plus grand , on permute. On
commence par les deux premiers , puis le deuxi`eme et le troisi`eme etc. jusqu’`a comparer les
´el´ements n-1 et n.
1. Appliquer la m´ethode ci-dessus sur le tableau T=[5,9,3,4,2].
2. ´
Ecrire une m´ethode triBulle(int [] T) qui utilise cet algorithme pour trier un tableau
pass´e en param`etre.
3. Combien cet algorithme fait-il de comparaisons, de permutations dans le meilleur et dans
le pire des cas ?
4. Appliquer l’algorithme complet au tableau Tci-dessus.
Exercice 2 Fusion de deux tableaux tri´es
On consid`ere deux tableaux tri´es d’entiers que l’on veut fusionner dans un troisi`eme avec une
complexit´e proportionnelle `a la somme des tailles des deux tableaux.
1. Essayer d’effectuer cette fusion ”`a la main” avec les deux tableaux suivants :
t1 = 0 3 12 43 67
t2 = 1 3 7 18 72 81
2. Ecrire une m´ethode public static int[] fusion(int[] t1, int[] t2) qui retourne
un tableau tri´e contenant tous les ´el´ements des tableaux t1 et t2 pass´es en argument.
3. erifier que la complexit´e de l’algorithme est bien conforme aux sp´ecifications : combien
de comparaisons effectue-t-on dans le pire des cas ? dans le meilleur ? `a quels cas cela
correspond-il ?
4. Quels sont les invariants, pr´econditions et postconditions de l’algorithme ? Prouver le pro-
gramme en n’oubliant pas la finitude.
5. Appliquer l’algorithme complet aux tableaux t1 et t2 ci-dessus.
1
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 ethode public static int[] division(int[] tab, int i, int j) re-
tournant un tableau de longueur ji+ 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 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.
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 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 ethode ecursive ?
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !