Vous êtes sur la page 1sur 5

Plan. . .

Tris rcursifs e
I3 - Algorithmique et programmation

Nicolas Delestre

Architecture des Systmes dInformation

as

Architecture des Systmes dInformation

as

Tris rcursifs - v1.0 e

1/1

Tris rcursifs - v1.0 e

2/1

Rappels sur les tris

Principe des tris rcursifs e

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

Architecture des Systmes dInformation

as

Architecture des Systmes dInformation

as

Tris rcursifs - v1.0 e

3/1

Tris rcursifs - v1.0 e

4/1

Le tri rapide (Quick sort) 1 / 9


Principe
1

Le tri rapide (Quick sort) 2 / 9

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

Exemple de partitionnement (pivot = premier lment) ee d 5 3 7 6 9 1 3 7 9 f 8

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

Architecture des Systmes dInformation

as

Architecture des Systmes dInformation

as

5/1

Tris rcursifs - v1.0 e

6/1

Le tri rapide (Quick sort) 3 / 9


Arbre des appels de procdures e
5 3 7 6 9 1 3 7 9 8 partitionner 1 3 3 5 9 6 7 7 9 8 trier 1 3 3 9 6 7 7 9 8

Le tri rapide (Quick sort) 4 / 9


Exemple de fonctionnement du partitionnement d 5 i d 5 3 7 i 6 9 1 3 7 9 f 8 j f 8 3 7 6 9 1 3 7 9 f 8 j

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

Architecture des Systmes dInformation

as

d 5
7/1 Tris rcursifs - v1.0 e

3 i

7 j

f 8

Architecture des Systmes dInformation

as

Tris rcursifs - v1.0 e

8/1

Le tri rapide (Quick sort) 5 / 9


Exemple de fonctionnement du partitionnement d 5 3 3 6 9 1 7 7 9 i j d 5 3 3 6 9 1 7 7 9 i j d 5 3 3 1 9 6 7 7 9 i j

Le tri rapide (Quick sort) 6 / 9


Exemple de fonctionnement du partitionnement d 5 3 3 1 9 6 7 7 9 i j d 5 3 3 1 9 6 7 7 9 j i d 1 3 3 5 9 6 7 7 9 Ip
Architecture des Systmes dInformation

f 8

f 8

f 8

f 8

f 8

f 8

as

Architecture des Systmes dInformation

as

Tris rcursifs - v1.0 e

9/1

Tris rcursifs - v1.0 e

10 / 1

Le tri rapide (Quick sort) 7 / 9


procdure partitionner (premi`re version) e e
procdure partitionner (E/S t : Tableau[1..MAX] dEntier ; E debut,n : Naturel ; S e indicePivot : Naturel) Dclaration i,j,pivot : Naturel e debut pivot t[debut] i debut j n tant que ij faire tant que t[i]pivot et ij faire i i+1 ntantque tant que t[j]>pivot et ij faire j j-1 ntantque si ij alors echanger(t[i],t[j]) nsi ntantque indicePivot j echanger(t[debut],t[j]) n
Tris rcursifs - v1.0 e

Le tri rapide (Quick sort) 8 / 9


procdure partitionner (deuxi`me version) e e
procdure partitionner (E/S t : Tableau[1..MAX] dEntier ; E debut,n : Naturel ; S e indicePivot : Naturel) Dclaration i,j,pivot : Naturel e debut pivot t[debut] i debut j n tant que ij faire si t[i]pivot alors i i+1 sinon si t[j]>pivot alors j j-1 sinon echanger(t[i],t[j]) nsi nsi ntantque indicePivot j echanger(t[debut],t[j]) n
Tris rcursifs - v1.0 e

Architecture des Systmes dInformation

as

Architecture des Systmes dInformation

as

11 / 1

12 / 1

Le tri rapide (Quick sort) 9 / 9


Calcul de la complexit e La procdure de partionnement a une complexit en n. La complexit du e e e tri rapide dpend donc du nombre dappels rcursifs (hauteur h de larbre e e de rcursion) e
Dans le meilleur des cas, le partitionnement coupe le tableau en deux parties de mme longueur (` plus ou moins 1 pr`s) e a e On a : n = 2h , donc h = log2 n Donc on a (nlog2 n) Dans le pire des cas, le partionnement coupe le tableau en deux sous tableaux, lun de longueur 1 et lautre n 1 Dans ce cas h = n Et donc on a O(n2 ) En moyenne on a (nlog2 n)

Le tri par fusion 1 / 6


Principe
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 )

Architecture des Systmes dInformation

as

Architecture des Systmes dInformation

as

13 / 1

14 / 1

Le tri par fusion 2 / 6

Le tri par fusion 3 / 6


Arbre des appels de procdures e
5 3 7 6 9 1 3 7 9 8 diviser 5 3 7 6 9 1 3 7 9 8 1 1 1 3 7 3 3 7 7 9 9 8 8 9 8 trier 5 3 3 7 7 6 6 9 9 6 6 7 6 6 fusionner 5 3 5 3 5 7 3 5 6 7 9 3 1 1 3 1 3 7 1 3 7 8 9 3 9 9 9 9 1 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

Architecture des Systmes dInformation

as

Architecture des Systmes dInformation

as

Tris rcursifs - v1.0 e

15 / 1

Tris rcursifs - v1.0 e

16 / 1

Le tri par fusion 4 / 6

Le tri par fusion 5 / 6


Procdure fusionner e
procdure fusionner (E/S t : Tableau[1..MAX] dEntier ; E debut,milieu,n : Naturel) e Dclaration i,j,k : Naturel, e temp : Tableau[1..MAX] dEntier

Exemple de fonctionnement de fusionner


d 3 Le tableau intermdiaire : e
1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 5 5 5 5 5 6 6 6 6 6 7 7 8 9 9 1 3 3 5 6 7 7 8 9 9 1 3 3 5 6 7 7 8 9 9 7 7 8 9 9 1 3 3 5 6 7 7 8 9 9 7 7 8 9 9 1 3 3 5 6 7 7 8 9 9 7 7 8 9 9 1 3 3 5 6 7 7 8 9 9 7 7 8 9 9

f 9

Architecture des Systmes dInformation

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

Architecture des Systmes dInformation

as

Tris rcursifs - v1.0 e

17 / 1

18 / 1

Le tri par fusion 6 / 6

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.

Architecture des Systmes dInformation

as

Architecture des Systmes dInformation

as

Tris rcursifs - v1.0 e

19 / 1

Tris rcursifs - v1.0 e

20 / 1

Vous aimerez peut-être aussi