Vous êtes sur la page 1sur 23

Algorithmique...

Les algorithmes de tri


Nicolas Delestre et Michel Mainguenaud
{Nicolas.Delestre,Michel.Mainguenaud}@insa-rouen.fr
Adapt pour lENSICAEN par
Luc Brun
luc.brun@ensicaen.fr

Tableaux p.1/23
Plan...
Les algortihmes de tri
Dfinition dun algorithme de tri,
Le tri par minimum successifs,
Le tri a bulles,
Le tri rapide.
Les algorithmes de recherche.
Recherche squentielle non trie
Recherche squentielle trie,
Recherche dichotomique.

Tableaux p.2/23
Dfinition dun algorithme de Tri
Les tableaux permettent de stocker plusieurs lments de mme type au
sein dune seule entit,
Lorsque le type de ces lments possde un ordre total, on peut donc les
ranger en ordre croissant ou dcroissant,
Trier un tableau cest donc ranger les lments dun tableau en ordre
croissant ou dcroissant
Dans ce cours on ne fera que des tris en ordre croissant
Il existe plusieurs mthodes de tri qui se diffrencient par leur complexit
dexcution et leur complexit de comprhension pour le programmeur.
Examinons tout dabord : le tri par minimum successif

Tableaux p.3/23
La procdure changer...
Tous les algorithmes de tri utilisent une procdure qui permet dchanger (de
permuter) la valeur de deux variables Dans le cas o les variables sont entires,
la procdure changer est la suivante :

procdure changer (E/S a,b : Entier)


Dclaration temp : Entier
dbut
temp a
ab
b temp
fin

Tableaux p.4/23
Tri par minimum successif...
Principe
Le tri par minimum successif est un tri par slection :
Pour une place donne, on slectionne llment qui doit y tre
positionn
De ce fait, si on parcourt la tableau de gauche droite, on positionne
chaque fois le plus petit lment qui se trouve dans le sous tableau droit
Ou plus gnralement : Pour trier le sous-tableau t[i..nbElements] il
suffit de positionner au rang i le plus petit lment de ce
sous-tableau et de trier le sous-tableau t[i+1..nbElements]

Tableaux p.5/23
Tri par minimum successif...
Par exemple, pour trier <101, 115, 30, 63, 47, 20>, on va avoir les boucles
suivantes :
i=1 <101, 115, 30, 63, 47, 20>
i=2 <20, 115, 30, 63, 47, 101>
i=3 <20, 30, 115, 63, 47, 101>
i=4 <20, 30, 47, 63, 115, 101>
i=5 <20,30, 47, 63, 115, 101>
Donc en sortie : <20, 30, 47, 63, 101, 155>

Il nous faut donc une fonction qui pour soit capable de dterminer le plus petit
lment (en fait lindice du plus petit lment) dun tableau partir dun certain
rang
Tableaux p.6/23
Fonction indiceDuMinimum...
fonction indiceDuMinimum (t : Tableau[1..MAX] dEntier ; rang, nbElements :
Naturel) : Naturel
Dclaration i, indiceCherche : Naturel
dbut
indiceCherche rang
pour i rang+1 nbElements faire
si t[i]<t[indiceCherche] alors
indiceCherche i
finsi
finpour
retourner indiceCherche
fin

Tableaux p.7/23
Tri par minimum successif...
Lalgorithme de tri est donc :
procdure effectuerTriParMimimumSuccessif (E/S t : Tableau[1..MAX]
dEntier; E nbElements : Naturel)
Dclaration i,indice : Naturel
dbut
pour i 1 nbElements-1 faire
indice indiceDuMinimum(t,i,nbElements)
si i 6= indice alors
echanger(t[i],t[indice])
finsi
finpour
fin

Tableaux p.8/23
Complexit
Recherche du minimum sur un tableau de taille n
Parcours du tableau.
n(n + 1)
T (n) = n + T (n 1) T (n) =
2
Complexit en O(n2 ).

Tableaux p.9/23
Le tri bulles
Principe de la mthode : Slectionner le minimum du tableau en
parcourant le tableau de la fin au dbut et en changeant tout couple
dlments conscutifs non ordonns.

Tableaux p.10/23
Tri bulles : Exemple
Par exemple, pour trier <101, 115, 30, 63, 47, 20>, on va avoir les boucles
suivantes :
i=1 <101, 115, 30, 63, 47, 20>
<101, 115, 30, 63, 20, 47>
<101, 115, 30, 20, 63, 47>
<101, 115, 20, 30, 63, 47>
<101, 20, 115, 30, 63, 47>
i=2 <20, 101, 115, 30, 63, 47>
i=3 <20, 30,101, 115, 47, 63>
i=4 <20, 30,47,101, 115, 63>
i=4 <20, 30, 47, 63, 101, 115>
Donc en sortie : <20, 30, 47, 63, 101, 155>
Tableaux p.11/23
Tri bulles : lalgorithme
procdure TriBulles (E/S t : Tableau[1..MAX] dEntiers,nbElements : Naturel)

Dclaration i,k : Naturel


dbut
pour i 0 nbElements-1 faire
pour k nbElements-1 i+1 faire
si t[k]<t[k-1] alors
echanger(t[k],t[k-1])
finsi
finpour
finpour
fin

Tableaux p.12/23
Tri bulles : Complexits
Nombre de tests(moyenne et pire des cas) :

n(n + 1)
T (n) = n + T (n 1) T (n) =
2
Complxit en O(n2 ).
Nombre dchanges (pire des cas):

E(n) = n 1 + n 2 + + 1 O(n2 )

Nombre dchange (en moyenne)O(n2 ) (calcul plus compliqu)

En rsum : complexit en O(n2 ).

Tableaux p.13/23
Le tri rapide
Principe de la mthode
Choisir un lment du tableau appel pivot,
Ordonner les lments du tableau par rapport au pivot
Appeler rcursivement le tri sur les parties du tableau
gauche et
droite du pivot.

Tableaux p.14/23
La partition
procdure partition (E/S t: Tableau[1..MAX] dEntier; E :premier, dernier :
Naturel, S: indPivot: Naturel)
Dclaration compteur, i : Naturel,pivot: Entier
dbut
compteur premier
pivot t[premier]
pour i premier+1 dernier faire
si t(i) < pivot alors
compteur compteur+1
echange(t[i],t[compteur]);
finsi
finpour
echanger(T,compteur,premier)
indPivot compteur
fin
Tableaux p.15/23
Exemple de partition
6(c) 3(i) 0 9 1 7 8 2 5 4
6 3(i,c) 0 9 1 7 8 2 5 4
6 3 0(i,c) 9 1 7 8 2 5 4
6 3 0(c) 9(i) 1 7 8 2 5 4
6 3 0(c) 9 1(i) 7 8 2 5 4
6 3 0 1(c) 9(i) 7 8 2 5 4
6 3 0 1(c) 9 7 8 2(i) 5 4
6 3 0 1 2(c) 7 8 9(i) 5 4
6 3 0 1 2 5(c) 8 9 7(i) 4
6 3 0 1 2 5 4(c) 9 7 8(i)
4 3 0 1 2 5 6(c) 9 7 8

Tableaux p.16/23
Le tri rapide
Algorithme :
procdure triRapide (E/S t : Tableau[1..MAX] dEntier; gauche,droit : Naturel)
Dclaration pivot : Naturel
dbut
si gauche<droite alors
partition(t,gauche,droite,pivot)
triRapide(t,gauche,pivot-1)
triRapide(t,pivot+1,droite)
finsi
fin

Tableaux p.17/23
Exemple. . .
Dans lexemple prcdent on passe de :<6,3,0,9,1,7,8,2,5,4>
<4,3,0,1,2,6,8,9,7> et on se relance sur :
<4,3,0,1,2> et
<8,9,7>

Tableaux p.18/23
Complexit
Le tri par rapport au pivot ncessite de parcourir le tableau. On relance
ensuite le processus sur les deux sous tableaux gauche et droite du
pivot.
T (n) = n + T (p) + T (q)
p, q taille des sous tableaux gauche et droits.
Dans le meilleur des cas p = q et:
n
T (n) = n + 2T ( )
2
Posons n = 2p . On obtient :

T (p) = 2p + 2T (p 1)
= p2p + 2p

En repassant en n : T (n) = log2 (n).n + n. La complexit est donc en


Tableaux p.19/23
Algorithmes de recherche
Recherche dans un tableau non tri.
fonction rechercheNonTrie (tab : Tableau[0..MAX] dlments, x :
lment) : Naturel
Dclaration i : Naturel
dbut
i0
tant que (iMAX) et (tab[i] 6= x) faire
i i+1
fintantque
si i=MAX+1 alors
retourner MAX+1
finsi
retourner i
fin
Tableaux p.20/23
Algorithmes de recherche
Recherche squentielle dans un tableau tri.

fonction rechercheSeqTrie (tab : Tableau[0..MAX+1] dlments, x : lment)


: Naturel
Dclaration i : Naturel
dbut
i0
tab[MAX+1] x
tant que x>tab[i] faire
i i+1
fintantque
retourner i
fin

Tableaux p.21/23
Algorithme de recherche
fonction rechercheDicoTrie (tab : Tableau[0..MAX] dlments, x : lment) :
Naturel
Dclaration gauche,droit,milieu : Naturel
dbut
gauche0;droitMAX
tant que gauche droit faire
milieu (gauche+droit) div 2
si x=tab[milieu] alors retourner milieu finsi
si x<tab[milieu] alors
droit milieu-1
sinon
gauche milieu+1
finsi
fintantque
retourner MAX+1
Tableaux p.22/23
fin
Exemple
On cherche 101 dans <20, 30, 47, 63, 101, 115>.
i=1 <20(g), 30, 47(m), 63, 101, 115(d)>.
i=2 <20, 30, 47, 63(g), 101(m), 115(d)>.
et on renvoi lindice de 101.

Tableaux p.23/23

Vous aimerez peut-être aussi