Informatique TD/ TP 4.3 Tri fusion
Lycée Jules Ferry Cannes Page 1 sur 2 TSI2
1 Compréhension de l'algorithme
1) Soit t = [15; 2; 4; 8; 17; 23] = t[0 : 6].
Dérouler étape par étape l’algorithme de tri de t en complétant les actions attendues et l'évolution
du fractionnement de t.
Compléter ensuite la remontée avec la fusion des partitions.
(appels récursifs)
(remontée : fusion)
[2; 4; 8; 15; 17; 23]
Appel tri t[0:1] t[1:3] t[3:4] t[4:6]
[15][2,4] [8][17,23] [15][2,4] [8][17,23]
Appel tri t[1:2] t[2:3] t[4:5] t[5:6]
[15] [2][4] [8] [17][23]
2) Détailler l'algorithme de la dernière fusion en complétant le tableau suivant avec m=3 et
t =[2,4,15,8,17,23]
[0, 0, 0, 0, 0, 0]
[2, 0, 0, 0, 0, 0]
[2, 4, 0, 0, 0, 0]
2
4
[2, 4, 8, 0, 0, 0]
3
4
[2, 4, 8, 15, 0, 0]
3
5
[2, 4, 8, 15, 17, 0]
3
6
[2, 4, 8, 15, 17, 23]
2 Fusion de deux portions adjacentes triées
3) Ecrire une fonction fusion qui prend en argument un tableau t, et deux entiers g et d, et qui
fusionne les portions t[g : m] et t[m : d] (supposées triées), en utilisant tmp pour copier
provisoirement les éléments, puis les replacer dans t[g : d].
3 Tri fusion récursif
4) Dérouler étape par étape l’algorithme de tri fusion du tableau t = [69; 35; 95; 53; 54; 40; 3; 36; 74]:
5) Ecrire une fonction récursive tri_fusion_rec qui prend en argument un tableau t, un tableau tmp
(de même taille que t), deux entiers g , d, et qui réalise un tri fusion de la portion t[g : d], en
utilisant toujours le même tableau tmp comme tampon lors de chaque fusion (on utilisera en boîte
noire la fonction fusion précédemment écrite).
6) Ecrire enfin une procédure tri_fusion qui prend en argument un tableau t et réalise un tri fusion du
tableau complet.
4 Optimisation du tri fusion
Une façon d’optimiser la fonction tri_fusion consiste à éviter la fusion lorsque, à l’issue des deux appels
récursifs, les éléments de la moitié gauche se trouvent être tous plus petits que les éléments de la moitié
droite. On le teste facilement en comparant l’élément le plus à droite de la moitié gauche et l’élément le
plus à gauche de la moitié droite.
7) Modifier la fonction tri_fusion en suivant cette idée.