Vous êtes sur la page 1sur 2

TD/TP n◦ 5  Tri de tableau

Stru tures de données (IF 122)

L'objet de e TD est de manipuler diérents algorithmes de tris et de omparer leur e a ité


dans le pires des as. On se donne à haque fois un tableau d'entiers et le problème onsiste à
modier l'ordre des éléments de telle sorte qu'ils soient triés après l'appli ation de l'algorithme.

1 Tris par séle tion


Le premier des algorithmes de tri est l'un des plus simples. Le prin ipe est de séle tionner
l'élément le plus petit du tableau, 'est-à-dire de trouver l'entier p tel que ∀i, t[i] > t[p]. Une fois
et empla ement trouvé, on é hange les éléments t[1] et t[p]. Puis on re ommen e es opérations
sur le reste du tableau ( 'est à dire les éléments ompris entre les indi es 2 et n). On re her he
alors le plus petit élément de ette nouvelle suite de nombre et on l'é hange ave t[2]. Et ainsi de
suite . . . jusqu'au moment où l'on a pla é tous les éléments du tableau.
Voi i les états su éssifs du tableau [9, 5, 1, 6, 2] par ette méthode :

9 5 1 6 2
1 5 9 6 2
1 2 9 6 5
1 2 5 6 9
1 2 5 6 9
Exer i e 1 (TD)  Complexité dans le pire des as On qualie un tableau donné de
pire des as lorsqu'il fait ee tuer à l'algorithme le nombre maximal d'opérations, le type
d'opérations étant à pré iser (allo ation mémoire, al ul arithmétique, . . . ).
 Quel est le pire des as en nombre d'é hanges pour la méthode pré édente ?
 À ombien d'é hanges pro ède-t-on alors ?
 Quel est le nombre de omparaisons ee tuées lors du tri ?

Exer i e 2 (TD/TP)  Tri par séle tion É rivez les méthodes suivantes :
1. une méthode e hange(int [℄ t, int p1, int p2) qui é hange les éléments t[p1℄ et
t[p2℄ du tableau.
2. une méthode triSel(int [℄ t) itérative qui réalise le tri par séle tion.

2 Tri à bulle
Le tri à bulles est sans doute le plus lent des tris possibles. L'idée est de omparer su essive-
ment tous les éléments adja ents d'un tableau et de les é hanger si le premier élément est supérieur
au se ond. On re ommen e ette opération tant que tous les éléments ne sont pas triés

Exer i e 3 (TD)  Complexité On s'intéresse à la omplexité en terme d'é hanges


 Testez ette méthode à la main sur le tableau de l'exer i e pré édent.
 Quel est le pire as possible et quelle est alors la omplexité de l'algorithme.

Exer i e 4 (TP)  Tri à bulles Implantez une méthode triBulle(int [℄ tab) qui trie
le tableau tab sur pla e ( 'est à dire sans tableau auxiliaire) par la méthode du tri à bulle.

1
3 Tri fusion
Le tri par fusion est le dernier exemple d'algorithme de tri que nous verrons dans e TD. Le
prin ipe repose sur la onstatation qu'il est fa ile de fusionner deux tableaux déjà triés. L'algorithme
onsiste don à diviser le tableau en deux parties à peu près égales, à trier les deux moitiés et à
fusionner le résultat.
Par exemple, si le tableau à trier est [9, 5, 1, 6, 2], l'algorithme donne la su ession suivante :

9 5 1 6 2

9 5 1 6 2

9 5

9 5 1 6 2

5 9

1 5 9 2 6

1 2 5 6 9

Exer i e 5 (TD/TP)  Division Donnez une méthode divise(int [℄ tab, int pos1,
int pos2) retournant un tableau de longueur pos2 − pos1 +1 ontenant les valeurs de tab
entre les valeur pos1 et pos2 in lus.

Exer i e 6 (TD/TP)  Fusion Donnez une méthode fusionne(int [℄ a,int [℄ b) re-


tournant la fusion de deux tableaux triés a et b.

Exer i e 7 (TD/TP)  Tri fusion À partir des deux méthodes pré édentes, proposez une
méthode triFusion(int [℄ tab) ré ursive retournant le tableau tab trié dans l'ordre rois-
sant.

4 Autour des algorithmes pré édents


Exer i e 8 (TD)  Complexité du tri fusion Donnez la omplexité de l'algorithme du
tri fusion en terme de omparaisons dans le pire des as.

Exer i e 9 (TP)  Amélioration du tri par séle tion Adaptez le tri par séle tion de ma-
nière à pla er à haque passage le minimum des valeurs non triées du tableau en début et le
maximum de es valeurs à la n. Donnez en une version ré ursive.

Exer i e 10 (TP)  Tri fusion sur pla e L'algorithme de tri fusion tel qu'il est présenté
dans la se tion 3 possède l'in onvénient de réer un nombre non négligeable de opies des
valeurs de départ ( f. la méthode divise). On peut se passer de es opies en onsidérant que
s inder le tableau en deux moitiés revient à donner les bornes orrespondant aux ases que
l'on veut trier.
Proposez une méthode triFusionAux(int [℄ tab,int debut, int fin) ré ursive
retour-
nant un tableau trié de longueur fin − debut +1 ontenant les valeur de tab entre les ases
debut et fin (in lues). Modiez triFusion en onséquen e.

Vous aimerez peut-être aussi