Anda di halaman 1dari 29

Les algorithmes de tri

Le problme du tri:
Le "tri" est l'opration qui consiste ordonner un ensemble d'lments.

Algorithme tri:
Entre: Un tableau dentiers de taille N
Sortie: Le mme tableau, tri par ordre croissant

Les algorithmes de tri

Le tri insertion:
Principe : Cette mthode de tri est identique celle utilise pour trier ses
cartes dans un jeu : on prend une carte, puis la deuxime que l'on place
aprs l'avoir compar avec la premire, ensuite la troisime que l'on
insre sa place en fonction des deux premires et ainsi de suite.
Le principe gnral est donc de considrer que les (i-1) premires cartes, sont
tries et de placer la i me carte, sa place parmi les (i-1) dj tries, et
ce jusqu ce que i = N

Les algorithmes de tri

Les algorithmes de tri

Tri par insertion:


Procdure insertion (T[n])

Pour iallant de 1 jusqu' n-1 faire


x T[i]
j i -1
tant que (j >= 0) et (T[j] > x) faire
T[j + 1] T[j]
j j -1
FinTantque
T[j + 1] x
FinPour

Les algorithmes de tri

Calcul de la complexit:
Au meilleur des cas : O(n)
Au pire des cas : O(n2)

Remarque:
L'fficacit du tri par insertion est meilleure si le tableau possde dj un certain ordre,

Recherche dichotomique

La recherche dans un tableau est une opration de base utilse dans plusieurs
algorithmes .
Principe:
Il s'agit de trouver dans un tableau l'indice correspondant une valeur donne. Le
principe de recherche dichotomique ne s'applique que pour des tableaux tris.
Soit X l'lment recherch dans un tableau T dont les bornes infrieure et suprieure
sont indiceInf et indiceSup. On appelle milieu (indiceInf + indiceSup) Div 2.
Principe de la recherche de l'indice X :
Si T[milieu] > X, alors l'indice de X, s'il existe, est compris entre indiceInf et milieu-1
Si T[milieu] = X, l'indice est trouv.
Si T[milieu] < X, alors l'indicede X, s'il existe, est compris entre milieu+1 et indiceSup

Recherche dichotomique

Fonction RechercheDicho(Tableau Tab[n] :entier, indiceInf ,indiceSup,X :entier) : entier


Variable
Trouv: boolean; mileu:entier;
Debut
Trouve = false ;
Tant que ((trouve=false) ET (indiceInf<=indiceSup)) faire
milieu (indiceInf + indiceSup) DIV 2 ;
Si (Tab[milieu]=X) Alors trouve true ;
Sinon Si (X < Tab[milieu]) Alors indiceSup milieu-1 ;
Sinon indiceInf milieu+1 ;
Fin Si
Fin Si
Fin Tant que
Si (trouve) Alors Retourner (milieu) ; Sinon Retourner (-1) ;
Fin Si
Fin

Recherche dichotomique

Complexit:
Le pire des cas pour la recherche d'un lment est de continuer les divisions jusqu
obtenir un tableau de taille 1.
La complexit = log2(n)

Les algorithmes de tri

Le Tri-slection
Principe:
Pour classer n lments, on parcourt le tableau pour rechercher le plus petit
lment que l'on permute alors avec le premier lment.
Le mme traitement est effectu avec le tableau ayant le premier lment en
moins.
Cette opration est rpte jusqu' ce que tous les lments soient classs.

Les algorithmes de tri

Le Tri-slection
Exemple:
Soit le tableau d'entiers suivant :
6
2 8 1 5 3 7 9 4 0
L'lment le plus petit se trouve en 9me position
6
2 8 1 5 3 7 9 4 0
On change l'lment le plus petit (en 9me position) avec le premier :
0
2 8 1 5 3 7 9 4 6
Le premier lment du tableau est dsormais forcment le plus petit. On continue donc
en considrant le mme tableau, en ignorant son premier lment :
0
2 8 1 5 3 7 9 4 6
Toute l'astuce de l'algorithme est l : on ignore volontairement dans la suite du
traitement les lments que l'on a dplacs au dbut du tableau.
De mme, on repre l'lment le plus petit en ignorant le premeir et on l'change avec
le deuxime :
0
1 8 2 5 3 7 9 4 6

Les algorithmes de tri

L'ALGORITHME- Tri slection


Exemple:
Et ainsi de suite, en ignorant chaque fois les lments dj tris (en bleu).
0
1 2 8 5 3 7 9 4 6
0

0
1 2 3 4
le tableau est tri !

Les algorithmes de tri

L'ALGORITHME- Tri slection


Variables:
i, j: entier ;
temp, petit : entier ;
tableau tab[n] : entier ;
Dbut
Pour i allant de 0 jusqu' n-2 faire
petiti;
Pour j de i+1 n-1 faire
Si t[j] < t[petit] alors petit j ; Fin si
Fin pour
tempt[petit];
t[petit] t[i];
t[i] temp;
Fin pour
Fin .

Les algorithmes de tri

L'ALGORITHME- Tri slection


On effectue environ n(n1)/2 comparaisons ;
La complexit de notre algorithme est quadratique en O(n 2 )

Les algorithmes de tri

Tri par propagation ou tri bulle


Le principe:
Le tri est ralis en propageant par permutations successives le plus grand
lment du tableau la fin de celui-ci
(comme les bulles qui remontent la surface d'un liquide)
Le plus grand lment gagne de proche en proche l'extrmit droite du
tableau.
Aprs le premier parcours, le plus grand lment se retrouve dans la dernire
case du tableau,
Ce principe est rpt pour chacun des lments,

Les algorithmes de tri

Tri par propagation ou tri bulle: Exemple


Prenons la suite de nombres suivante :
6035142
6 0 3 5 1 4 2 // On compare 6 et 0 : on inverse
0 6 3 5 1 4 2 // On compare 6 et 3 : on inverse
0 3 6 5 1 4 2 // On compare 6 et 5 : on inverse
0 3 5 6 1 4 2 // On compare 6 et 1 : on inverse
0 3 5 1 6 4 2 // On compare 6 et 4 : on inverse
0 3 5 1 4 6 2 // On compare 6 et 2 : on inverse
0 3 5 1 4 2 6 // Nous avons termin la 1ire itration
La question se poser est la suivante : Devons-nous continuer ? Oui car lors du dernier
passage, au moins un change a t effectu.
Nous allons donc refaire un passage mais en omettant la dernire case .

0351426
0351426
0351426
0315426
0314526
0314256

// On compare 0 et 3 : on laisse
// On compare 3 et 5 : on laisse
// On compare 5 et 1 : on inverse
// On compare 5 et 4 : on inverse
// On compare 5 et 2 : on inverse
// Nous avons termin la 2ime itration

Les algorithmes de tri

Tri par propagation ou tri bulle


Algorithme :
Procdure tri_Bulle (tableau tab[n]:entier )
variables
i, k,tmp : entier ;
dbut
Pour i allant de n-2 jusqu' 0 pas de -1 faire
Pour k allant de 0 jusqu' i faire
Si (tab[k] > tab[k+1]) alors // change des couples non classs de la sous-suite
tmp tab[k];
tab[k] tab[k+1];
tab[k+1] tmp;
Fin si
Fin pour
Fin pour
Fin ,

Complexit algorithmique

Tri par propagation ou tri bulle


Algorithme :
Procdure tri_Bulle2 (tableau tab[N]:entier )
variables
nbrEltATrier, i, stop, temp:entier ;
NbrEltATrier n-1;
tant que (nbrEltATrier > 0)
i 0;
stop 0;
tant que (i < nbrEltATrier)
si (tab[i] > tab[i+1]) alors
temp tab[i];
tab[i] tab[i+1];
tab[i+1] temp;
stop i;
finSi
i i + 1;
finTantque
nbrEltATrier stop;
finTantque

Complexit algorithmique

Tri par propagation ou tri bulle


On effectue environ n(n1)/2 comparaisons ;
La complexit de notre algorithme est quadratique en O(n 2 )

Algorithmes avancs du tri

Tri par partition-fusion


Tri rapide(quik sort)

Algorithmes avancs du tri

Tri par partition-fusion:


Lalgorithme tri partition-Fusion est de type '' diviser pour rgner ''.
Il faut donc tudier ses trois phases:
Diviser : cette tape se rduit au calcul du milieu de lintervalle [deb,fin],
pour obtenir deux sous_problmes de taille n/2
Rgner(ou rsoudre) : lalgorithme rsout rcursivement deux sousproblmes de tailles respectives (n/2) .
Combiner : consiste combiner les deux solutions des deux sousproblmes.

Algorithmes avancs du tri

Exemple:
Prenons la squence suivante :[11,4,27,17,32,5,12,6]
1-Opration de dcoupage:
[11,4,27,17]
[32,5,12,6]
[11,4] [27,17]
[32,5]
[12,6]
[11][4] [27][17]
[32][5]
[12] [6]
Donc on obtient aprs partition la liste suivante:

[11] [4] [27] [17] [32] [5] [12][6]


Toutes les partitions sont tries, vu qu'il n'y a qu'un seul lment.
Le but va maintenant tre de fusionner correctement ces listes, chacune trie,
entre elles.

2- Opration de fusion:
On va fusionner les listes 2 2, ce qui va nous donner 4 sous-listes

[4,11] [17,27] [5,32] [6,12]


[4,11,17,27] [5,6,12,32]
[4,5,6,11,12,17,27,32]:qui constitue bien un tri de la squence de dpart.

Algorithmes avancs du tri

Algorithme:
Fonction tri_fusion (T, deb, fin) : tableau entier
variables
tableau T1,T2:entier ;
Milieu :entier;
Dbut
Si (deb = fin) alors Retourner T ;
Sinon milieu (deb + fin) DIV 2;
T1 tri_fusion (T, deb, milieu) ;
T2 tri_fusion (T, milieu+1, fin)) ;
Retourner fusion (T1, T2) ;
Fin si
FIN

Algorithmes avancs du tri

Algorithme:
Fonction tri_fusion (T, deb, fin) : tableau entier
variables
tableau T1,T2:entier ;
Milieu :entier;
Dbut
Si (deb = fin) alors Retourner T ;
Sinon milieu (deb + fin) DIV 2;
T1 tri_fusion (T, deb, milieu) ;
T2 tri_fusion (T, milieu+1, fin) ;
Retourner fusion (T1, T2) ;
Fin si
FIN

Algorithmes avancs du tri


Algorithme:
Fonction Fusion (T1, T2) : tableau entier
Variables
tableau T1[N]:entier ;
tableau T2[M]:entier ;
tableau T[N+M]:entier ;
i, j: entier;
Dbut
i0 ;j0 ;
Tantque (i+j <> N+M) faire
Si (i N-1) alors
si (j M-1) alors
si (T1[i] < T2[j]) alors T[i+j]T1[i] ; ii+1 ;
sinon T[i+j]T2[j] ; jj+1 ;
Fin si
sinon T[i+j]T1[i]; ii+1;
Fin si
sinon T[i+j]T2[j] ; jj+1 ;
Fin si
FinTanque Retourner T ;
FIN

Algorithmes avancs du tri

Complexit: T(n) pour un tableau de taille n.


Complexit pour chaque phase:
Diviser : cette tape se rduit au calcul du milieu de lintervalle [deb,fin], sa
complexit est donc en O(1). (addition et division)
Rgner : lalgorithme rsout rcursivement deux sous-problmes de tailles
respectives (n/2) , do une complexit en 2T(n/2).
Combiner : la complexit de cette tape est celle de lalgorithme de fusion qui est
de O(n)
d'o T(n)=2T(n/2)+n+1
d'o T(n) = O(n log2n)

Algorithmes avancs du tri

Tri rapide (Quicksort):

Principe : Comme le tri par fusion, il se dcompose donc en trois tapes :


Diviser : Le tableau Test partitionn (et rarrang) en deux sous-tableaux ,
T1 et T2 tels que chaque lment de T1soit infrieur ou gal un lment
pivot et chaque lment de T2 est suprieur l'lment pivot .
L'lment pivot est choisi d'une manire alatoire pendant la procdure du
partitionnement.
Rgner : Les deux sous-tableaux T1 et T2 sont tris par des appels
rcursifs.
Combiner : Comme les sous-tableaux sont tris sur place, aucun travail
supplmentaire nest ncessaire pour les recombiner, le tableau T est
entirement tri !

Algorithmes avancs du tri


Tri rapide (Quicksort):
Tri_Rapide (T, deb, fin)
Variables
indice_pivot:entier;
Dbut
Si (deb < fin ) alors
indice_pivot Partionner (T, deb, fin);
Tri_Rapide (T, deb, indice_pivot-1);
Tri_Rapide (T, indice_pivot+1, fin)
Fin si
Fin.

Algorithmes avancs du tri


Tri rapide (Quicksort):
Partionner (T, deb, fin): entier
Variables:
i,j,elemPivot : entier;
Dbut
elemPivot T(deb);
i deb ; j fin;
Tant que (i<j)
TantQue T(j) >elemPivot
jj-1
FinTantQue
TantQue T(i) < elemPivot
i i+1
FinTantQue
si ( i < j ) alors permuter (T(i), T(j));
sinon retourner j
Fin Si
fin TantQue
Fin

Algorithmes avancs du tri

Calcul Complexit:
Le meilleur des cas:
T(n) = 2 T(n/2)+(n+1)
D'o
T(n) =O(nlog2n)
Le pire des cas:
T(n) = T(n-1)+(n+1)
D'o
T(n) =O(n2)
Complexit en moyenne:
T(n)= Moyenne0<=indicepivot<=n-1(T(indicepivot)+T(n-1-indicepivot))
D'o
T(n) =O(nlog2n)