Lyc´ee Hoche MPSI B TD Maple - Algorithmes de tri Algorithmique et calcul formel
Un tableau de nombres ´etant donn´e, on doit ranger les valeurs de ce tableau par ordre croissant. On consid`ere deux m´ethodes : le tri par insertion et le tri par fusion.
initialisation de B
cle <-- 1
c l e < = n
inserer(A[cle],cle)
c l e < - - c l e + 1
fin F
V
Fig.1 –ins()
Tri par insertion : ins()
Il est `a noter que l’appel se fait sans param`etre car des variables globales sont utilis´ees.
Variables globales de la proc´edure principale A : tableau donn´e
n: entier,Aest index´e de 1 `an B : tableau r´esultat
Variables locales
cle : cl´e pour le parcours deA
Le principe est le suivant (figure 1) : – Parcourir le tableau donn´e
– Ins´erer lavaleur courante du tableau donn´e dans le tableau de r´esultats La proc´edureins() utilise une autre proc´edureinserer(x, p) qui ins`ere `a la bonne place la valeur xdans le tableau B entre 1 etp. Il est `a noter que le tableau B partiellement rempli et que les valeurs ins´er´ees sont rang´ees.Pour cette deuxi`eme proc´edure,B est toujours une variable globale,cleB est une variable locale.
Approche r´ ecursive du tri par fusion : f us(p, q)
Deux proc´edures sont utilis´ees : la proc´edure principale (r´ecursive)f us(p, q) et une autre not´eef usionner(p, m, q).
Il est assez facile de fusionner deux listes d´ej`a tri´ees en une liste tri´ee.
On imagine par exemple deux piles de copies d´ej`a tri´ees par ordre alphab´etiques avec le nom visible et les lettres du d´ebut de l’alphabet sur le dessus de la pile. On prend alors dans chaque pile la copie visible dont le nom est avant l’autre copie visible et on forme une troisi`eme pile. Cette troisi`eme pile sera compl`etement tri´ee.
L’appel de la proc´eduref us(p, m, q) r´eordonne entrepetqles valeurs d’un tableau A(variable globale) qui ´etait partiellement tri´e (dep`amet dem+ 1 `a q. L’appel f us(p, q) trie ”en place” le tableau Apour les cl´es entrepet q. Apr`es l’appel :
A[p]≤A[p+ 1]≤ · · · ≤A[q]
Cette proc´edure est r´ecursive
La deuxi`eme id´ee est de r´epartir toutes les copies du d´epart en tas plus petits que l’on trie puis de les fusionner (figure 4).
Les proc´edures seront ´ecrites en utilisant deux variables globales A et n , A d´esignant le tableau index´e de 1 `an`a trier.
Cette cr´eation est mise `a disposition selon le Contrat
Paternit´e-Partage des Conditions Initiales `a l’Identique 2.0 France disponible en ligne http://creativecommons.org/licenses/by-sa/2.0/fr/
1 R´emy Nicolai tris12 novembre 2008
Lyc´ee Hoche MPSI B TD Maple - Algorithmes de tri Algorithmique et calcul formel
cleB <-- p
c l e B > = 0 e t B [ c l e B ] > x
B [ c l e B + 1 ] < - - B [ c l e B ]
cleB <-- cleB - 1
B [ c l e B + 1 ] < - - x
fin F
V
Fig.2 –inserer(x, p)
cle <-- p cle1 <-- p c l e 2 < - - m + 1
initialiser B
c l e 1 < = m e t c l e 2 < = q
A [ c l e 1 ] < = A [ c l e 2 ]
B[cle] <-- A[cle2]
c l e 2 < - - c l e 2 + 1
B[cle] <-- A[cle1]
c l e 1 < - - c l e 1 + 1
c l e < - - c l e + 1 completer B
F V
fin
V
F
A <-- B
Fig.3 –f usionner(p, m, q)
Cette cr´eation est mise `a disposition selon le Contrat
Paternit´e-Partage des Conditions Initiales `a l’Identique 2.0 France disponible en ligne http://creativecommons.org/licenses/by-sa/2.0/fr/
2 R´emy Nicolai tris12 novembre 2008
Lyc´ee Hoche MPSI B TD Maple - Algorithmes de tri Algorithmique et calcul formel
q - p > 1
m < - - m i l i e u d e p e t q
fus(p,m) f u s ( m + 1 , q )
fusionner(p,m,q)
ranger les deux valeurs
fin V
F
Fig.4 –f us(p, q)
Cette cr´eation est mise `a disposition selon le Contrat
Paternit´e-Partage des Conditions Initiales `a l’Identique 2.0 France disponible en ligne http://creativecommons.org/licenses/by-sa/2.0/fr/
3 R´emy Nicolai tris12 novembre 2008