La boucle récursive assure que lors de la fusion, on traite tous les éléments. Le principe consiste à séparer le tableau plusieurs fois en 2 et à trier des paires de 2 éléments. Les fonctions sont appelées de façon récursive tel que décrit ci-dessous.
(TF([T]) <=> Tri_par_fusion(): séparation de la liste [T];
Fusion([T],n1,n2): fusion d'une première liste (partie 1)
qui contient n2 éléments avec une deuxième liste (partie 2).
La longueur totale de la liste combinée [T] (qui contient
partie 1 et partie 2) est n1>n2.
TF (21 23 4 2 89 2 3 65 78 14 25 67 67 89 100 1 14 78 78) TF (21 23 4 2 89 2 3 65 78 14) TF (21 23 4 2 89) TF (21 23 4) TF (21 23) TF (21) TF (23) Fusion([21 23], 2, 1) -> [21 23] TF(4) Fusion(21 23 4, 3, 2) -> [4 21 23] TF(2 89) TF(2) TF(89) Fusion([2 89], 2, 1) -> [2 89] Fusion([4 21 23 2 89], 5, 3) -> [2 4 21 23 89] TF(2 3 65 78 14) TF(2 3 65) TF(2 3) TF(2) TF(3) Fusion([2 3], 2, 1)->[2 3] TF(65) Fusion([2 3 65], 3, 2) -> [2 3 65] TF(78 14) TF(78) TF(14) Fusion([78 14],) Etc...
Algorithme de fusion:
Il est important de comprendre comment marche la
procédure Fusion. L'idée est de fusionner
les deux parties déjà triées du
tableau passé en paramètre et obtenir
ainsi un tableau entièrement trié.
Fusion([T], 19, 10) avec T = [2 2 3 4 14 21 23 65 78 89 1 14 25 67 67 78 78 89 100]
On commence par créer un tableau temporaire U. On compare ensuite le premier élément des 2 parties triées et on place dans le tableau U le plus petit des deux éléments. On répète ainsi la procédure jusqu'à ce qu'un des deux tableaux soit vide.
U[1] U[1 2] U[1 2 2] U[1 2 2 3] ... U[1 2 2 3 4 14 14 21 23 25 65 67 78 89]
Les éléments restants dans le deuxième tableau sont insérés à la suite dans le tableau temporaire jusqu'à le compléter entièrement.
U[1 2 2 3 4 14 14 21 23 25 65 67 78 89 89 100]
On recopie le tableau temporaire U dans T
T = U
La profondeur est de log(16) = 4 et la largeur est de 16 (à chaque fois 16 opérations sont effectuées). La complexité est donc de nlog(n).
Pour 128 éléments:
N = 2 | E: 64 opérations | F: 2 opérations |
N = 4 | E: 4096 opérations | F: 24 opérations |
N = 8 | E: 16'777'216 opérations | F: 40'320 opérations |
N = 10 | E: 1'073'741'824 opérations | F: 3'628'800 opérations |
N = 12 | E: 68'719'476'736 opérations | F: 479'001'600 opérations |