
MP1 Lycée Janson de Sailly Algorithmes de tri
Précondition :n> 1 # Au moins 2 éléments dans le tableau
fonction TRI_INSERTION(A, n) :
1. pour iallant de 1 à n−1faire :
2. temp = A[i]
3. j=i#jest l’indice du trou dans le tableau
4. tant que {j> 0 et A[j−1] > temp } faire :
5. A[j] = A[j−1]
6. j=j−1
7. A[j] = temp
Intérêt : Le tri se fait sur place c’est à dire à l’intérieur même du
tableau. Pas besoin de réserver un espace mémoire supplémentaire.
Réalisation
1. Écrire cet algorithme en langage Python et le tester avec la liste
proposée sur le site mp1.
2. En vous aidant du tableau ci-dessous, calculer la complexité
temporelle de cette fonction dans le meilleur des cas, puis dans
le pire des cas (à définir).
fonction TRI_INSERTION(A, n) Coût Nbre de fois
1pour iallant de 1àn-1 :c1
2 temp = A[i] c2
3 j = i c3
4tant que ( j > 0 et A[j - 1] > temp ) : c4
5 A[j] =A[j - 1] c5
6 j = j - 1 c6
7 A[j] = temp c7
2 Tri fusion
2.1 Principe
Le tri fusion est un exemple du paradigme diviser pour résoudre.
Cela consiste à prendre un problème et à le diviser en deux sous - pro-
blèmes plus simples à résoudre. On utilise ensuite les deux solutions
pour résoudre le problème initial
Prenons l’exemple d’un jeu de 32 cartes à trier. L’idée est de par-
tager ce jeu en deux jeux de 16 cartes (diviser) et de trier séparément
ces deux jeux (résoudre). On ré-assemble ensuite chacun des deux
jeux, grâce à un algorithme de fusion.
2.2 Algorithme de fusion
L’algorithme le plus important de ce tri est celui qui permet la
fusion de deux jeux de cartes triés séparément pour n’en former qu’un
dans lequel toutes les cartes sont triées.
Dans notre cas, les deux jeux de cartes sont en fait un sous-tableau
A[p...q, q + 1, ...r] de A, où p6q < r. Le premier jeux de carte est
représenté par A[p...q] et le second jeu par A[q+ 1, ..., r]. Chacun est
déjà trié séparément, la plus petite valeur étant celle d’indice le plus
bas et la plus grande valeur celle d’indice le plus élevé. On aura donc :
A[p]6A[p+ 1] 6... 6A[q]et A[q+ 1] 6... 6A[r]
L’algorithme de fusion est écrit dans une fonction FUSION qui
prend en argument le tableau A et les trois entiers p,qet r:
•On commence par "vider" A[p...r] dans deux sous-tableau : G
pour tous les éléments allant de A[p] à A[q] et Dpour tous les
éléments allant de A[q+1] à A[r].
•On remplit ensuite à nouveau A[p...r] en comparant chaque élé-
ment de Get de Dafin de le placer à la bonne place dans
A.
2