Académique Documents
Professionnel Documents
Culture Documents
Plan du cours
1. Introduction
4. Tri à bulle
5. Tri rapide
Exemple:
Trier N entier dans un ordres croissant.
Trier N étudiants dans l'ordre décroissant de leurs moyennes (réel).
Trier N noms dans l'ordre alphabétique croissant.
Introduction
Tri interne/externe
D'une façon générale, tout ensemble muni d'un ordre total peut fournir une suite
d'éléments à trier.
Deux catégories de tris :
Principe
Répéter:
- Chercher le plus petit (plus grand) élément => Sélection.
min = 2
Etape 1: Faire l’échange entre 2 (min) et 7
2 13 20 30 7 15 6
min = 6
Etape 2: Faire l’échange entre 6 (min) et 13
2 6 20 30 7 15 13
min = 7
Tri par sélection 2 6 20 30 7 15 13
2 6 7 13 15 20 30
2 6 7 13 15 2O 30
Tri par sélection
Algorithme
Procédure TriSelection (Var T : Tableau d’entiers, N : entier)
i, j, indMin , temp : entier;
Début Ce tri parcourt tous les
éléments de l’indice 0 au
Pour i allant de 1 à N-1 faire
dernier. Pour chaque tour de la
indMin = i; boucle principale, il y a deux
Pour j allant de i+1 à N Recherche de opérations :
si (T[j] < T[indMin]) alors l’indice du Une boucle parcourt la
minimum partie non triée pour
indMin = j;
trouver le plus petit
Fin Si élément.
Fin Pour On procède à un échange
entre le plus petit
Echange des
élément trouvé et le
temp = t[i]; valeurs entre la
premier de la partie de
case courante et le
T[i] = T[indMin]; tableau non triée.
minimum
T[indMin] = tmp;
Fin pour
Fin
Tri par sélection
Algorithme
Procédure TriSelection (Var T : Tableau d’entiers, N : entier)
i, j, indMin , temp : entier;
Début
Pour i allant de 1 à N-1 faire
indMin indiceMin (T, i, N)
échanger (T, i, indMin);
Fin pour
Fin
La fonction indiceMin retourne l’indice du minimum de la partie du tableau [i, N]
La fonction échanger fait la permutation entre l’élément i et le minimum
Tri par sélection
Complexité
Il est facile de compter le nombre d’opérations. Quel que soit l’ordre du tableau initial, le nombre de comparaisons reste
le même, ainsi que le nombre d’échanges.
À chaque itération, on considère l’élément T[i] et on le compare successivement à T[i+1], ..., T[N].
Meilleur cas (le tableau est déjà trié)
- Nombre de comparaisons : n-1 ; La complexité au meilleur cas en nombre de
- Nombre de permutations : 0 ; comparaison est de de l'ordre de n, que l'on écrit O(n).
La complexité au pire des cas en tri par insertion est de l'ordre de n², que l'on écrit O(n²).
2. Tri par insertion
Le tri du joueur de cartes!
Le tri par insertion permet de trier un tableau. L’algorithme parcourt le tableau pour
insérer chaque élément à la bonne place dans la partie triée du tableau.
La méthode est identique à celle que l'on utilise pour ranger des cartes que l'on tient
dans sa main :
On insère dans le paquet de cartes déjà rangées une nouvelle carte au bon endroit.
2. Tri par insertion
Principe
Répéter
Insertion du prochain élément dans la partie qui est déjà triée précédemment.
La partie de départ qui est triée est le premier élément.
Il se pourrait qu’on a à déplacer plusieurs éléments pour l’insertion.
Considérer que les (i-1) premiers éléments du tableau sont triés et d’insérer le ième élément à
sa place parmi les (i-1) déjà triés, et ce jusqu'à ce que i = n.
Pour insérer l’élément T[i], on conserve sa valeur dans une variable intermédiaire « temp »,
puis on compare temp successivement à chaque élément T[i-1], T[i-2], ... , qu'on déplace vers
la droite tant que sa valeur est supérieure à celle de temp.
On affecte alors à l'emplacement dans le tableau laissé libre par ce décalage la valeur de
2. Tri par insertion 2 1
Les i-1 premiers éléments Elément à Les éléments non triés temp
déjà triés insérer
T 7 13 5 30 2 15 6
7 13 5 30 2 15 6
5 7 13 30 2 15 6
5 7 13 30 2 15 6
2. Tri par insertion
2 5 7 13 30 15 6
2 5 7 13 15 30 6
2 5 6 7 13 15 30
2. Tri par insertion
Algorithme
Procédure TriInsertion (Var T : Tableau d’entiers, N : entier)
i, k, temp : entier;
Début
Pour i=2 à N faire
temp T[i]; k i;
Tant que (k > 1 et T[k-1] > temp) faire
T [k] T[k - 1];
k k - 1;
Fin tant que
T[k] temp;
Fin pour
Fin
2. Tri par insertion
Complexité
Meilleur cas (le tableau est déjà trié)
La complexité au meilleur cas en nombre de comparaison est de de l'ordre de n, que l'on écrit O(n).
La complexité au pire des cas en tri par insertion est de l'ordre de n², que l'on écrit O(n²).
3. Tri à bulle
Le tri à bulle, appelé aussi tri bulle (bubble en anglais), permet de trier un tableau.
L’algorithme parcourt le tableau pour comparer les éléments deux à deux afin de faire
descendre les valeurs les plus lourdes en bas du tableau.
Les éléments les plus légers (un peu comme les bulles d’air dans l’eau) vont
remonter au début du tableau (à la surface).
C'est le moins performant de la catégorie des tris par insertion ou sélection, mais
comme c'est un algorithme simple, il est intéressant à utiliser pédagogiquement.
3. Tri à bulle
Principe
Répéter
Parcourir le tableau en comparant deux à deux les éléments successifs, permuter s'ils ne
sont pas dans l'ordre.
Répéter tant que des permutations sont effectuées.
Après le premier parcours, le plus grand élément étant à sa position définitive, il n'a plus à être traité.
Le reste du tableau est en revanche encore en désordre. Il faut donc le parcourir à nouveau, en s'arrêtant à
l'avant-dernier élément.
Après ce deuxième parcours, les deux plus grands éléments sont à leur position définitive.
Il faut donc répéter les parcours du tableau, jusqu'à ce que les deux plus petits éléments soient placés à
leur position définitive.
3. Tri à bulle
temp
vi vi+1
Itération 1 7 13 5 30 2 15 6
7 13 5 30 2 15 6
7 5 13 30 2 15 6
7 5 13 30 2 15 6
7 5 13 2 30 15 6
7 5 13 2 15 30 6
7 5 13 2 15 6 30
3. Tri à bulle
Itération 2 7 5 13 2 15 6 30
5 7 13 2 15 6 30
5 7 13 2 15 6 30
5 7 2 13 15 6 30
5 7 2 13 15 6 30
5 7 2 13 6 15 30
3. Tri à bulle
Itération 3
5 7 2 13 6 15 30
5 7 2 13 6 15 30
5 2 7 13 6 15 30
5 2 7 13 6 15 30
5 2 7 6 13 15 30
3. Tri à bulle
Itération 4
5 2 7 6 13 15 30
2 5 7 6 13 15 30
2 5 7 6 13 15 30
2 5 6 7 13 15 30
3. Tri à bulle
Itération 5
2 5 6 7 13 15 30
2 5 6 7 13 15 30
2 5 6 7 13 15 30
Itération 6
2 5 6 7 13 15 30
2 5 6 7 13 15 30
Algorithme TriBulles
local: i , j , n, temp sont des entiers naturels
Entrée : T est un Tableau d'Entiers naturels de 1 à n éléments
Sortie : T est un Tableau d'Entiers naturels de 1 à n éléments
Début
pour i de n à 1 faire // recommence une sous-suite
pour j de 2 à i faire // échange des couples non classés de la sous-suite
si T[ j-1 ] >T[ j ] alors // T[j-1] et T[j] non ordonnés
temp T[ j-1 ] ;
T[ j-1 ] T[ j ] ;
T[ j ] temp; //échange de positions entre T[j-1] et T[j]
Fsi
Finpour
Finpour
Fin
3. Tri à bulle
Complexité
Meilleur cas (le tableau est déjà trié)
Deviser
Trier
Fusionner
II.1Tri par fusion
Exemple T 7 13 5 30 2 15 6 9 1 10
7 13 5 30 2 15 6 9 1 10
7 13 5 30 2 15 6 9 1 10
7 13 5 30 2 15 6 9 1 10
7 13 5 30 2 15 6 9 1 10
7 13 5 30 2
15 6 9 1 10
7 13 5 30 2 15 6 9 1 10
7 13 5 30 2 15 6 9 1 10
7 13 5 30 2 15 6 9 1 10
II.1Tri par fusion
7 13 5 30 2 15 6 9 1 10
5 30 2 15 6 9 1 10
7 13
5 7 13 30 2 15 6 9 1 10
5 7 13 2 30 15 6 9 1 10
2 5 7 13 30 6 15 9 1 10
2 5 7 13 30 6 9 15 1 10
2 5 7 13 30 6 9 15 1 10
2 5 7 13 30 1 6 9 10 15
II.1Tri par fusion
2 5 7 13 30 1 6 9 10 15
2>1 1
2<6 1 2
5<6 1 2 5
7>6 1 2 5 6
7<9 1 2 5 6 7
13>9 1 2 5 6 7 9
13>10 1 2 5 6 7 9 10
13<15 1 2 5 6 7 9 10 13
15<30 1 2 5 6 7 9 10 13 15
1 2 5 6 7 9 10 13 15 30
Exemple 2
II.1Tri par fusion Algorithme tantque (i <= n1) et (j <= n2) faire
Procédure triFusion(var T : Tableau [1..n] d’entiers, début, fin : Entier) ; si L[i] <= R[j] Alors
Variables milieu : entier T[k] L[i];
Début i i+1;
si (début < fin) Alors sinon
milieu (début + fin)/2 ; //Trouvez le milieu pour diviser le tableau T[k] R[j];
//en deux moitiés j j+1;
triFusion(T, début, milieu) ;//Appelez triFusion pour la 1ere moitié du T finsinon
triFusion(T, milieu+1, fin) ; //Appelez triFusion pour la 2eme moitié du T k k+1;
Fusionner(T,debut,milieu,fin) ; //Fusionnez les deux moitiés triées finsi
finSi ; fintantque
fin ; //Copiez tous les éléments restants du
Procédure Fusionner(T[n] : Tableau, début, milieu, fin : entier); tableau non vide
Variables n1, n2,i,j,k : entier, L[1..n1+1],R[1…n2+1] : Tableau ; tantque (i <= n1) faire
Début T[k] L[i];
n1 milieu-début+1 ; i i+1;
n2 fin-milieu; k k+1;
Pour i 1 à n1 faire fintantque
L[i] T[debut+i-1]; tantque et (j <= n2) faire
Pour j 1 à n2 faire T[k] R[j];
R[j] T[milieu+j]; j j+1;
i 1; k k+1;
j 1; fintantque
K debut; fin
II.1Tri par fusion
Complexité
Le tri par fusion est un algorithme récursif et la complexité temporelle peut être exprimée comme une
relation de récurrence.
Il y a 2 appels récursifs, chacun porte sur la moitié du tableau. O(n) pour recopier les 2 sous-tableaux en
2xO(n/2) + leur fusion en O(n).
La complexité temporelle du tri par fusion est dans les 3 cas (pire, moyen et meilleur) car le tri par
fusion divise toujours le tableau en deux moitiés et prend un temps linéaire pour fusionner deux moitiés.
II.2 Tri rapide
Inventé en 1960 par Sir Charles Antony Richard Hoare et
amélioré par Robert Sedgewick dans les années 70, basé sur
le paradigme « diviser-pour-régner ».
Principe
Ce trie permet de trier un tableau avec un traitement récursif et dichotomique. Par
récursivité, un élément appelé pivot est choisi. Le pivot est alors placé à sa place définitive
dans le tableau avec les éléments plus petits avant et les plus grands après. La récursivité
traite les deux sous-tableaux avant et après le pivot.
II.2 Tri rapide
Choisir un élément « pivot » (au hasard mais généralement c’est le dernier élément : T[n]).
Diviser l’ensemble ou le tableau en deux sous-ensembles.
Réorganiser les éléments de sorte que :
Un sous ensemble contient les éléments inférieurs au pivot et le deuxième sous tableau contient
les éléments supérieurs au pivot.
Répéter la procédure récursivement jusqu’au chaque sous ensemble contient un seul élément.
Combiner les sous tableaux pour avoir un tableau trié.
II.2 Tri rapide
pivot
pivot pivot
II.2 Tri rapide
Exemple T 17 13 5 30 2 15 6 9 1 10
Choisir un pivot P = 10 17 13 5 30 2 15 6 9 1 10
pivot
Comparer entre le pivot et le 1er elet 17 13 5 30 2 15 6 9 1 10
17>10
Permutation entre 17 et 5 5 13 17 30 2 15 6 9 1 10
5 2 6 9 7
5 2 6 7 9
II.2 Tri rapide 5 2 6 7 9
Choisir un pivot P = 6 5 2 6
pivot
5 2
pivot
2 5
2 5 6 7 9 10
2 5 6 7 9 10 17 30 13 15
17 30 13 15
17 30 13 15
17 30 13 15
17 30 13 15
13 30 17 15
13 15 17 30
2 5 6 7 9 10 13 15 17 30