Académique Documents
Professionnel Documents
Culture Documents
STRUCTURES DE DONNÉES
1er Année Cycle Préparatoire | MPI
06/12/2022 1
Plan
06/12/2022 2
Algorithmique &
Structures de Données
06/12/2022 3
Le problème du tri
4
Le problème du tri
Principe de fonctionnement
On distingue les algorithmes procédant par comparaisons successives entre
éléments, dits « tris par comparaisons ».
Les algorithmes de tri par comparaison lisent les entrées uniquement au
moyen d'une fonction de comparaison binaire ou ternaire (lorsque le cas
d'égalité est traité différemment). Il existe encore différents principes de
fonctionnement au sein de cette classe : certains algorithmes de tri par
comparaison procèdent par insertions successives, d'autres par fusions,
d'autres encore par sélection.
En l'absence de précisions, on entend habituellement par « algorithme de tri »
un algorithme de tri procédant par comparaisons.
5
Le problème du tri
• Algorithmes élémentaires :
tri à bulles, tri par sélection, tri par insertion, …
• Algorithmes complexes :
tri rapide (Quicksort), tri par tas (Heapsort), …
6
TRI PAR SELECTION
Algorithmes élémentaires
Tri par Sélection
Sans le savoir, où sans s’en rendre compte, on est confronté très jeune à des
algorithmes de tri.
je dirais que cela se produit au plus tard en classe de primaire, vers l’âge de six
ans, à l’occasion du passage du photographe scolaire.
Pour bien composer sa photo, le photographe doit placer les enfants sur le
banc en fonction de leurs tailles.
8
Tri par Sélection
9
Tri par Sélection
Tri par Sélection
…
Tri par Sélection
Tri_Selection
Début
Pour Chaque Elément de T faire
Chercher le Min de la position i
Si il ∃ un j < i permutation (i,j)
Fpour
Fin
Tri par Sélection
Tri_Min_Max
Début
Chercher le Min de la position d
Chercher le Max de la position f
Si il ∃ un Min < d permutation (d,Min)
Si il ∃ un Max > f permutation (f,Max)
Fsi
Tri par Sélection : variante 1
Début
d := 1; f := N
Tant que d < f faire
min_max(T,d,f,pmin,pmax)
Permute(T,d,pmin)
Si pmax > d Alors
Permute(T,f,pmax)
Fsi
d := d+1; f := f-1
Fait
FIN
Tri par Sélection : variante 1
Début
Si d < f Alors
min_max(T,d,f,pmin,pmax)
Permute(T,d,pmin)
Si pmax > d Alors
Permute(T,f,pmax)
Fsi
Tri_Min_Max(T,d+1,f-1)
Fsi
FIN
TRI PAR INSERTION
Algorithmes élémentaires
Tri par insertion
19
Tri par insertion
Tri par insertion
…
Tri par insertion
Auxiliaire
Début
Pour i de 2 à N faire
temp := T[i]
j := i-1
Tant que j ≥ 1 et T[j] > temp faire
T[j+1] := T[j]
j := j-1
Fait
T[j+1] := temp
Fpour
Fin
TRI À BULLES
Algorithmes élémentaires
Tri à Bulles
25
Tri à Bulles
…
Tri à Bulles
…
Tri à Bulles
Début
pour i de N à 2 pas(-1) faire
pour j de 1 à i-1 faire
si T[j] > T[j+1] Alors
Permuter(T[j],T[j+1])
Fsi
Fpour
Fpour
Fin
Tri à Bulles
Début
pour i de 1 à N-1 faire
pour j de N à i+1 pas(-1) faire
si T[j-1] > T[j] Alors
Permuter(T[j],T[j-1])
Fsi
fpour
fpour
Fin
Tri à Bulles : 1er amélioration
Shaker Sort
Le tri Shaker, également appelé tri Cocktail ou tri à bulles
bidirectionnel est une variante du tri à bulles.
Son principe est identique à celui du tri à bulles, sauf qu'il
change de direction à chaque passe.
3 5 2 1 4
Shaker Sort
3 5 2 1 4
3 5 2 1 4 3 2 5 1 4
3 2 5 1 4 3 2 1 5 4
3 2 1 5 4 3 2 1 4 5
3 2 1 4 5
3 2 1 4 5
…
Tri à Bulles : 2èmm amélioration
3 5 2 1 4
Shaker Sort
…
3 2 1 4 5
3 1 2 4 5 3 1 2 4 5
3 1 2 4 5 1 3 2 4 5
1 3 2 4 5
1 3 2 4 5 1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
…
1 2 3 4 5
Tri à Bulles : 1er amélioration
Le tri par dénombrement (counting sort) est l’un des algorithmes de tri le plus
rapide, et pourtant il est loin d'être compliqué, même s'il a quelques
restrictions et défauts.
Le tri s'exécute en un temps linéaire, mais uniquement sur des nombres
entiers.
La particularité du tri est qu'il est la base d'autres algorithmes de tri en temps
linéaires, permettant de s'adapter aux besoins en temps et en mémoire.
Tri par Dénombrement
T 2 3 5 4 2 1 2 3
D 0 1 3 2 1 1
T 1 2 2 2 3 3 4 5
Tri par Dénombrement
Début
Tab_dénombrement(T,N,D,P)
k := 1
Pour i de 0 à P faire
Si D[i] <> 0 Alors
pour j de 1 à D[i] faire
T[k]:= i
k := k + 1
Fpour
Fsi
Fpour
Fin
Début
Pour i de 0 à P faire
D[i] := 0
Fpour
Pour i de 1 à N faire
D[S[i]] := D[S[i]] + 1
Fpour
Fin
45
Tri GNOME
Principe
on compare deux éléments consécutifs :
• s’ils sont dans l’ordre on se déplace d’un pas vers la
fin du tableau (ou on s’arrête si la fin est atteinte),
• sinon, on les permute et on se déplace d’un pas vers
le début du tableau,
on commence par le début du tableau
Tri GNOME
3 5 2 1 4
3 5 2 1 4
3 5 2 1 4 3 2 5 1 4
3 2 5 1 4 2 3 5 1 4
2 3 5 1 4
2 3 5 1 4 2 3 1 5 4
2 3 1 5 4 2 1 3 5 4
2 1 3 5 4 1 2 3 5 4
1 2 3 5 4
Tri GNOME
3 5 2 1 4
1 2 3 5 4
1 2 3 5 4
1 2 3 5 4 1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
Tri GNOME
Tri_Gnome(S:Tab, N:entier)
VAR i : entier
Début
pos := 2
Tant que pos <= N faire
Si T[pos] >= T[pos-1] alors
pos := pos + 1
Sinon
Permutation(T[pos],T[pos-1])
Si pos > 2 alors
pos := pos - 1
Fsi
Fsi
Ftant que
FiN
Tri Fusion
Algorithmes élémentaires
Tri Fusion
Dans la grande famille des tris reposant sur le principe « diviser pour régner
», on trouve le Tri Fusion.
À mon sens, le Tri Fusion est au Tri rapide ce que le Tri par insertion est au Tri
par sélection.
Dans cette famille de tri, on travaille toujours en trois phases :
1. D’abord on divise.
2. Ensuite on règne.
3. Et pour finir, on réconcilie (fusionne).
Alors que, pour le Tri rapide , tout se fait à la construction de l’arbre, pour le
Tri Fusion , la partie intéressante se situe lors de la phase de réconciliation.
51
Tri Fusion
Principe
• Partager le tableau en 2 parties
• Trier récursivement chaque partie
• Fusionner les 2 parties
Tri Fusion
Tri Fusion
Début
Si d ≤ f alors
Si d = f alors
R[d] := T[d]
Sinon
m := (d + f) div 2
Tri_Fusion(T,d,m,R1)
Tri_Fusion(T,m+1,f,R2)
Fusion(R1,d,m,R2,m+1,f,R)
Fsi
Fsi
FiN
Tri Fusion
Début
Tant que (dA <= fA) ET (dB <= fB) Faire
Si A[dA] <= B[dB] alors
C[dC]:= A[dA]
dA := dA + 1
Sinon
C[dC] := B[dB]
dB := dB + 1
Fin Si
dC := dC + 1
Ftantq
...
Tri Fusion
Début
...
Tant que (dA <= fA) Faire
C[dC] := A[dA]
dA := dA + 1
dC := dC + 1
Ftantq
C’est l’un des algorithmes les plus utilisés et certainement celui qui présente
le plus de variantes. Le Tri rapide, aussi appelé Quick Sort , fait partie de la
famille d’algorithme dont le fonctionnement repose sur le principe «diviser
pour régner».
Pour réaliser un Tri rapide, on doit choisir un élément dans la liste, qu’on
appelle pivot.
On divise ensuite la liste en deux sous-listes. La première, à gauche, contient
les éléments inférieurs au pivot. La seconde, à droite, contient les éléments
supérieurs au pivot.
59
Tri Rapide
C’est l’un des algorithmes les plus utilisés et certainement celui qui présente
le plus de variantes. Le Tri rapide, aussi appelé Quick Sort , fait partie de la
famille d’algorithme dont le fonctionnement repose sur le principe «diviser
pour régner».
Pour réaliser un Tri rapide, on doit choisir un élément dans la liste, qu’on
appelle pivot.
On divise ensuite la liste en deux sous-listes. La première, à gauche, contient
les éléments inférieurs au pivot. La seconde, à droite, contient les éléments
supérieurs au pivot.
On reproduit alors récursivement ce choix du pivot et la division sur les listes
de gauche et de droite précédemment construites jusqu’à n’avoir que des
sous-listes de zéro ou un élément.
Pour finir, il suffit de rassembler les éléments de toutes les sous-listes dans
l’ordre gauche-droite.
60
Tri Rapide
Principe
• Diviser le tableau en deux parties séparées par un
élément (appelé pivot) de telle manière que :
La grosse difficulté
du Tri rapide réside
dans le choix du bon
pivot, le risque
étant de
déséquilibrer les
sous-listes qu’on va
construire.
Quand on n’a pas de
meilleure idée et
faute de mieux, on
peut prendre le
premier élément,
Tri Rapide
Début
Si d < f Alors
m := Partition(T, d, f)
Tri_Rapide(T, d, m-1)
Tri_Rapide(T, m+1, f)
fsi
FiN
Tri Rapide
Début
piv := T[d]
i := d
j := f + 1
Répéter
Répéter i := i + 1 jqa (T[i] ≥ piv ou i ≥ j)
Répéter j := j – 1 jqa (T[j] ≤ piv ou j < i)
si i < j Alors
Permutation(T,i,j)
Fsi
jusqu’a j ≤ i
Permutation(T,d,j)
Partition := j
FiN
LA CLASSIFICATION
DES ALGORITHMES DE TRI
Algorithmes élémentaires
La classification des algorithmes de tri
68
Le problème du tri
Tri en place
69
Le problème du tri
Tri stable
70
Le problème du tri
71
Le problème du tri
Tri parallèle
72
principaux algorithmes de tri : Stable
73
principaux algorithmes de tri : Instable
74
Application
Soit un tableau T d’entiers contenant des éléments ordonnés suivis par quelques
éléments dans un ordre quelconque (autrement dit T est partiellement trié).
On suppose que le nombre d'éléments ordonnés est largement supérieur à celui
des éléments non ordonnés.
Si vous avez à trier un tel tableau, quelle méthode de tri choisirez-vous? Justifiez
votre réponse.
75
Application
on n’a aucune idée sur les éléments non triés par rapport aux éléments triés (plus
petits / plus grands) donc les éléments peuvent ne pas occuper leurs positions
finales.
Alors qu’avec le tri par sélection ou le tri bulle les éléments de la partie triée sont à
leurs positions définitives et ils ne bougeront plus jamais.
76