Vous êtes sur la page 1sur 33

Module:

ALGORITHMIQUE 1

Les algorithmes de Tri

Niveaux: 1A
Equipe ALGO

Année universitaire:
2021/2022
Objectifs
• Appliquer les algorithmes de Tri sur les vecteurs:
✔Tri par sélection
✔Tri à bulles
✔Tri par insertion
• Maitriser l’algorithme de recherche dichotomique dans un vecteur

• Evaluer la complexité des algorithmes de tri

2
Introduction
Une opération de tri consiste à ordonner une suite de valeurs mémorisées selon un critère
bien déterminé qu’on appelle clé et suivant une relation d’ordre (croissant ou décroissant).

Dans ce qui suit, on va s’intéresser à trois techniques de tri qui sont :


✔ Tri par Sélection
✔ Tri par Insertion
✔ Tri à Bulles
Tri par Sélection
Principe
● Rechercher l'indice du plus petit élément (minimum) du tableau et permuter
l'élément correspondant avec l'élément d'indice 1.

● Recherche du minimum en commençant à partir de l'indice i+1.

● Rechercher le second plus petit élément du tableau et l'échanger avec


l'élément d'indice 2.

● Continuer de cette façon jusqu'à ce que le tableau soit entièrement trié.


Tri par Sélection
Exemple d’exécution
Soit le tableau T suivant composé de 5 entiers :
min min
indice 1 2 3 4 5

T[i] 60 50 20 40 30
50<60? 20<50?40<20? 30<20?
min
Tri par Sélection
Exemple d’exécution
Soit le tableau T suivant composé de 5 entiers :
min min min
indice 1 2 3 4 5

T[i] 20 50 60 40 30
60<50? 40<50?30<40?
Tri par Sélection
Exemple d’exécution
Soit le tableau T suivant composé de 5 entiers :
min min
indice 1 2 3 4 5

T[i] 20 30 60 40 50
40<60? 50<40?
Tri par Sélection
Exemple d’exécution
Soit le tableau T suivant composé de 5 entiers :
min min
indice 1 2 3 4 5

T[i] 20 30 40 60 50
50<60?

Le tableau est trié par ordre croissant


Tri par Sélection
Algorithme
Algorithme Tri_Sélection
Constante
n :100
Type
Tab_Entier = Tableau[1..n] de Entier
Variable
Min, temp, i : entier
T : Tab_Entier
Début
Pour i allant de 1 à (n-1) Faire
min i
Pour j allant de (i+1) à n Faire
Si (T(j) < T(min)) Alors
min j
FinSi
FinPour
Temp T(i)
T(i) T(min)
T(min) temp
FinPour
Fin
Tri par Insertion
Principe

On insère les éléments un par un en les plaçant correctement :

1. on insère le second élément à sa place dans le sous tableau constitué du premier élément

2. on insère ensuite le troisième élément du tableau à sa place dans le sous tableau constitué
du premier et du deuxième élément

3. à l'étape i, on cherche la bonne position de l'élément T[i] dans le sous tableau trié de 1 à
i-1.

4. ainsi de suite jusqu’au dernier élément.


Tri par Insertion
Exemple d’exécution

Soit le tableau T suivant composé de 5 entiers :


indice 1 2 3 4 5

T[i] 60 50 20 40 30

60>50?
Décalage à droite

temp: 50
Tri par Insertion
Exemple d’exécution

Soit le tableau T suivant composé de 5 entiers :


indice 1 2 3 4 5

T[i] 50 60 20 40 30

60>20?
Décalage à droite

temp: 20 50>20?
Décalage à droite
Tri par Insertion
Exemple d’exécution

Soit le tableau T suivant composé de 5 entiers :


indice 1 2 3 4 5

T[i] 20 50 60 40 30

60>40?
Décalage à droite

50>40?
temp: 40 Décalage à droite
20>40?
Pas de décalage
Tri par Insertion
Exemple d’exécution

Soit le tableau T suivant composé de 5 entiers :


indice 1 2 3 4 5

T[i] 20 40 50 60 30
60>30?
Décalage à droite
50>30?
Décalage à droite
40>30?
temp: 30
Décalage à droite
20>30?
Pas de décalage

Le tableau est trié par ordre croissant


Tri par Insertion
Algorithme
Algorithme Tri_Insertion
Constante n : entier
Type Tab_Entier = Tableau[1..n] de Entier
Variable i, j, temp : entier
T : Tab_Entier
Début
Pour i allant 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
Fin Tant que
T(j+1) temp
Fin pour
Fin
Tri à Bulles
Principe

• Soit T un tableau d'entiers. Le tri à bulles consiste à :

1)Comparer, deux à deux, les éléments consécutifs d'un tableau ( T[i] et T[i+1]).

2) Effectuer une permutation si T[i] > T[i+1].

3) On continue de trier jusqu'à ce qu'il n'y ait plus de permutation.


Tri à bulles
Exemple d’exécution
Soit le tableau T suivant composé de 5 entiers :
indice 1 2 3 4 5
T[i] 60 50 20 40 30

60>50?

2
Tri à bulles
Exemple d’exécution
Soit le tableau T suivant composé de 5 entiers :
indice 1 2 3 4 5
T[i] 50 60 20 40 30

60>20

2
Tri à bulles
Exemple d’exécution
Soit le tableau T suivant composé de 5 entiers :
indice 1 2 3 4 5
T[i] 50 20 60 40 30

60>40

2
Tri à bulles
Exemple d’exécution
Soit le tableau T suivant composé de 5 entiers :
indice 1 2 3 4 5
T[i] 50 20 40 60 30

60>30

2
Tri à bulles
Exemple d’exécution
Soit le tableau T suivant composé de 5 entiers :
indice 1 2 3 4 5
T[i] 50 20 40 30 60

50>20

2
Tri à bulles
Exemple d’exécution
Soit le tableau T suivant composé de 5 entiers :
indice 1 2 3 4 5
T[i] 20 50 40 30 60

50>40

2
Tri à bulles
Exemple d’exécution
Soit le tableau T suivant composé de 5 entiers :
indice 1 2 3 4 5
T[i] 20 40 50 30 60

50>30

2
Tri à bulles
Exemple d’exécution
Soit le tableau T suivant composé de 5 entiers :
indice 1 2 3 4 5
T[i] 20 40 30 50 60

50>60

2
Tri à bulles
Exemple d’exécution
Soit le tableau T suivant composé de 5 entiers :
indice 1 2 3 4 5
T[i] 20 40 30 50 60

20>40 40>30

2
Tri à bulles
Exemple d’exécution
Soit le tableau T suivant composé de 5 entiers :
indice 1 2 3 4 5
T[i] 20 30 40 50 60

40>50

2
Tri à bulles
Exemple d’exécution
Soit le tableau T suivant composé de 5 entiers :
indice 1 2 3 4 5
T[i] 20 30 40 50 60

50>60

2
Tri à bulles
Exemple d’exécution
Soit le tableau T suivant composé de 5 entiers :
indice 1 2 3 4 5
T[i] 20 30 40 50 60

Le tableau est trié par ordre croissant

2
Tri à Bulles
Algorithme
Algorithme Tri_Bulles
Constante n : entier
Type Tab_Entier = Tableau[1..n] de Entier
Variable permute : Booléen
i, temp : entier
T : Tab_Entier
Début
Répéter
permute faux
Pour i allant de 2 à n Faire
Si (T(i-1) > T(i)) Alors
Permute vrai
temp T(i-1)
T(i-1) T(i)
T(i) temp
FinSi
FinPour
Jusqu’à (Non(permute))
Fin
Evaluation des performances
Le Tri par Sélection : Le nombre de boucles internes est estimé à n(n-1)/2 et le nombre maximal de
déplacements d’éléments est de l’ordre de 2(n-1). Cette technique est intéressante dans le cas où le tableau
est en désordre total mais elle n’est pas optimale si la première partie du tableau est triée.

Le Tri par Insertion : Le nombre de boucles interne est estimé à n(n-1)/2. Cette technique est intéressante
pour des tableaux ayant été déjà triés mais auxquels on a rajouté de nouveaux éléments en fin du tableau.

Le Tri à Bulles : Cette technique nécessite un grand nombre de déplacements d’éléments. Il va nécessiter
(n-1) boucles principales dans le cas où le dernier élément devrait être placé en premier. Le nombre
maximal de boucles internes est de l’ordre de (n-1)2 . Elle peut être intéressante quand le tableau initial est
déjà pré-trié c’est à dire que les éléments ne sont pas disposés trop loin de leur position finale.
Recherche dichotomique
Algorithme qui détermine la première position d’une valeur
donnée dans un tableau TRIÉS
Principe
● Décomposer un tableau T en deux sous-tableaux
● Trois cas :
○ Si Val = T[mil] alors Val est trouvée et la recherche est terminée
○ Si Val < T[mil] alors la recherche de Val sera effectuée dans la partie gauche
du tableau T
○ Si Val > T[mil] alors la recherche de Val sera effectuée dans la partie droite du
tableau T
● La recherche sera poursuivie tant que T[mil]!=Val et la dimension de sous-tableau
reste valide (>0)
Recherche dichotomique
V=13

1 2 3 4 5 6 7 8 9 10

d f
1 2 3 4 5 6 7 8 9 10

d f
1 2 3 4 5 6 7 8 9 10

d f
1 2 3 4 5 6 7 8 9 10

32
d f
Recherche dichotomique
Algorithme
Algorithme Dichoto
Constante N=Val1
Type TabEnt = Tableau [1..N] de Entier
Variable T : TabEnt
d, f, mil : entier
X : entier (* X est l’élément à chercher dans le tableau *)
Début
Lire(X)
d 1
f N
Répéter
mil (d + f) div 2
Si (X < T(mil)) Alors f mil – 1
Sinon d mil +1
Fin Si
Jusqu’à (X=T(mil)) ou (d > f)
Si (X=T(mil)) Alors ECRIRE (X, 'Se Trouve dans T ')
Sinon ECRIRE (X, 'Inexistant dans T ')
Fin Si
Fin

Vous aimerez peut-être aussi