Académique Documents
Professionnel Documents
Culture Documents
Cours 4.3
Tri fusion
0 1 2 3 4 5
5 8 3 2 9
m=5//2=2
0 1 2
5 8
On divise en 2 parties
chaque liste par
rcurrence.
2 3 4 5
3 2 9
m= (5+2)//2 =7//2 =3
2 3
3
3 4 5
2 9
m= (5+3)//2 =8//2 =4
m=2//2=1
0 1
5
1 2
8
3 4
2
4 5
9
3 4 5
2 9
On rassemble chaque
liste en sens inverse en
interclassant les lments
(on assemble donc des
listes tries ou unitaire)
0 1 2
5 8
2 3 4 5
2 3 9
0 1 2 3 4 5
2 3 5 8 9
Page 1 sur 3
TSI2
Informatique
Cours 4.3
Tri fusion
Pour raliser la fusion de deux parties adjacentes dj tries, notes t[g : m] et t[m : d] :
- on utilise un tableau annexe tmp (il est trop difficile de travailler en place ici).
- on parcourt simultanment t[g : m] avec un indice i et t[m : d] avec un indice j et on range leurs
lments au fur et mesure dans tmp l'indice k, dans le bon ordre.
- une fois tmp rempli, on recopie son contenu dans t[g : d] (en crasant les anciennes valeurs)
- la portion t[g : d] est donc trie.
Algorithme fusion (t, g, d)
# Entre : liste trier t, indice de gauche g (entier), indice de droite d (entier)
# Sortie : liste trie entre l'indice gauche et l'indice droit.
tmp liste contenant (d-g) zros
# cration d'un tableau tmp
m (g+d) div 2
# calcul du milieu de la partition
ig
# initialisation de l'indice de la liste gauche
jm
# initialisation de l'indice de la liste droite
Pour k variant de 0 d-g-1 faire
# balayage des lments de tmp
Si i<m et (j=d ou t[i]<t[j]) alors
# si i est puis et (si j est puise ou t[i]<t[j])
tmp[k] t[i]
# placer en lment de la partition gauche dans tmp
i i +1
Sinon
tmp[k] t[j]
# placer en lment de la partition droite dans tmp
j j +1
Fin Si
Fin Pour
t[g:d] tmp[0:d-g]
# remplacer tmp dans t sur la partition trie
Renvoyer t
Fin d'algorithme fusion
Page 2 sur 3
TSI2
Informatique
Cours 4.3
Tri fusion
3 Performances de l'algorithme
Complexit
Le cot temporel de lalgorithme de tri est principalement donn par des oprations de comparaison
sur les lments trier.
On raisonne dans la suite sur le nombre de donnes traiter pour lanalyse de la complexit de
lalgorithme.
Soit t un tableau de longueur n. Notons C(n) le nombre de comparaisons ncessaires pour effectuer le
tri fusion de t.
Calculons C(n) :
- on effectue rcursivement les tris fusion de t[0 : m] et t[m : len(n)] : cela demande 2*C(n/2)
comparaisons (si n est pair).
- ensuite, la fusion des deux sous-tableaux demande f (n) comparaisons.
Etudions les deux cas extrmes :
o f (n) = n est le pire cas : tous les lments de chaque portion sont examins (les lments
les plus petits sont alternativement dans chaque portion):
C(n) = n + 2C(n/2) C(n) ~ n log(n):
o f (n) = n/2 est le meilleur cas : seuls les lments dune portion sont examins (sils sont
tous plus petits que ceux de lautre portion) :
C(n) =n/2+ 2C (n/2) C(n) ~ n log(n)/2
Bilan des complexits temporelle du tri rapide
meilleur des cas pire cas
comparaisons n.log(n)/2
n.log(n)
affectations
2.n.log(n)
2.n.log(n)
L'algorithme de tri fusion a donc des performances optimales.
Il n'est dpass que par le tri par insertion, dans le cas d'une liste presque trie, avec une complexit
linaire.
Ressources :
Damien Broizat
Patrick Beynet UPSTILyce Jules Ferry Cannes
Page 3 sur 3
TSI2