Fusion de deux listes triées
Le principe de la fusion.
On dispose de deux listes triées L1 et L2 (ordre croissant). On veut fusionner ces deux listes en une liste triée.
L'algorithme de fusion est le suivant :
1. Créer une liste vide L3.
2. Ajouter a=min(L1[0], L2[0]) en queue de L3.
3. Effacer a de sa liste d'origine.
4. Reprendre au point 2 jusqu'à ce que L1 ou L2 soit vide.
5. Ajouter en queue de L3 les éléments de celle des deux listes L1, L2 qui n'est pas vide.
Remarque : dans cet algorithme, L1 et L2 peuvent être deux sous-listes d'une liste L initiale.
Un exemple
On dispose de la liste L= [3,6,8,9,10, 2,4,5]. Cette liste peut être découpée en deux-sous listes L1 et L2 triées :
L=[ 3,6,8,9,10,
2, 4, 5 ].
Déroulons les étapes de l'algorithme :
L3 = [] et L=[ 3,6,8,9,10,
2, 4, 5 ]
L3 = [2] et
L=[ 3,6,8,9,10,
4, 5 ]
L3 = [2, 3] et
L=[ 6,8,9,10,
4, 5 ]
L3 = [2, 3, 4 ] et
L=[ 6,8,9,10,
5 ]
L3 = [2, 3, 4, 5 ] et
L=[ 6,8,9,10,
]
L3 = [2, 3, 4, 5, 6,8,9,10 ] et
L=[ ,
]
Remarque : dans une implémentation de l'algorithme, il n'est pas nécessaire de vider la liste L. On utilisera plutôt des "indicateurs de position" (variables de type int par exemple) pour savoir où l'on en est dans chaque sous-liste. Cela évite de redéfinir L en permanence et est moins coûteux en temps de calcul.