Académique Documents
Professionnel Documents
Culture Documents
Tris rcursifs e
I3 - Algorithmique et programmation
Nicolas Delestre
as
as
1/1
2/1
Objectif procdure trier (E/S t : Tableau[1..MAX] dElement,E nbElements : e Naturel) Les tris vus jusqu` prsent a e Tri ` bulles (O(n2 )) a Tri par slection (O(n2 )) e Tri par insertion (O(n2 ))
Principe Lalgorithme des tris rcursifs est bas sur le principe : e e Diviser : On divise le tableau en deux Rgner : On trie ces deux tableaux e Combiner : On combine ces deux tableaux Il existe deux tris rcursifs e Le tri rapide : lintelligence du tri se trouve au niveau de la division du tableau (partitionnement) Le tri par fusion : lintelligence du tri se trouve au niveau la combinaison des deux tableaux
as
as
3/1
4/1
Partitionner le tableau an que tous les lments du sous-tableau gauche soient ee plus petits ou gaux ` un lment (le pivot) e a ee Trier le sous-tableau gauche et le sous-tableau droit
algorithme
procdure triRapide (E/S t :Tableau[1..MAX] dEntier,E nb :Naturel) e debut triRapideRecursif(t,1,nb) n procdure triRapideRecursif (E/S t :Tableau[1..MAX] dEntier,E d,f :Naturel) e Dclaration indicePivot : Naturel e debut si d<f alors partionner(t,d,f,indicePivot) triRapideRecursif(t,d,indicePivot-1) triRapideRecursif(t,indicePivot+1,f) nsi n
Tris rcursifs - v1.0 e
d 1 f 8
5 Ip
as
as
5/1
6/1
3 3 3 3 3 3 7 7 6 6 8 7 7 7 6 6
8 7 7
6 7 8
7 9 9
d 5
7 i
3 j
7 6 6
6 7
as
d 5
7/1 Tris rcursifs - v1.0 e
3 i
7 j
f 8
as
8/1
f 8
f 8
f 8
f 8
f 8
f 8
as
as
9/1
10 / 1
as
as
11 / 1
12 / 1
Diviser le tableau en deux sous-tableaux de mme longueur (` plus e a ou moins 1 pr`s) e Trier le sous-tableau gauche et le sous-tableau droit Fusionner les deux sous-tableaux
2 3
algorithme
procdure triFusion (E/S t :Tableau[1..MAX] dEntier,E nb :Naturel) e debut triFusionRecursif(t,1,nb) n procdure triFusionRecursif (E/S t :Tableau[1..MAX] dEntier,E d,f :Naturel) e debut si d<f alors triFusionRecursif(t,d,(d+f) div 2) triFusionRecursif(t,((d+f) div 2)+1,f) fusionnner(t,d,(d+f) div 2,f) nsi n
Tris rcursifs - v1.0 e
Complexit e
(nlog2 n)
Tris rcursifs - v1.0 e
(nlog2 n)
O(n2 )
as
as
13 / 1
14 / 1
Fonctionnement de fusionner d 3 5 6 7 9
5 5 3 3
f 9
5 5 5 3 3 7 7
1 3 3
7 7 9
8 8
as
as
15 / 1
16 / 1
f 9
as
debut i debut j milieu+1 pour k 1 ` n-debut+1 faire a si imilieu et jn alors si t[i]t[j] alors temp[k] t[i] i i+1 sinon temp[k] t[j] j j+1 nsi sinon si imilieu alors temp[k] t[i] i i+1 sinon temp[k] t[j] j j+1 nsi nsi npour pour k 1 ` n-debut+1 faire a t[debut+k-1] temp[k] npour n Tris rcursifs - v1.0 e
as
17 / 1
18 / 1
Conclusion
Calcul de la complexit e
Soit h La hauteur de larbre de rcursion e Ici on a toujours n = 2h , donc h = log2 n Donc en temps on a (nlog2 n), O(nlog2 n) et (nlog2 n) Mais on a besoin dun tableau intermdiaire pour fusionner e
Il existe plusieurs algorithmes de tri que lon peut classer suivant : les mthodes utilises (itratifs ou rcursifs) e e e e les performances Ces cours ne prsentent pas toutes les mthodes de tri, entre autres : e e le shellsort le heapsort (ou tri par tas)
Lun des meilleurs car en O(nlog2 n) et itratif e
(nlog2 n) O(nlog2 n)
Complexit e
(nlog2 n)
le radixsort etc.
as
as
19 / 1
20 / 1