Vous êtes sur la page 1sur 44

Algorithmes de Tri

Algorithmique Avancée et Complexité

Chapitre 2

Ecole Nationale des Sciences Appliquées de Marrakech


Université Cadi Ayyad
Benchikhi Loubna : l.benchikhi@uca.ma

October 30, 2018

Chapitre 2 Algorithmique Avancée et Compléxité


Algorithmes de Tri

Plan I

1 Algorithmes de Tri
Tri par sélection
Tri par insértion
Tri à bulle
Tri par fusion
Tri rapide
Conclusion
Exercice

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

Presentation du probleme de Tri

Définition
Entrée: une suite de n éléments e1 , e2 , ..., en
Sortie: une permutation de la suite e’1 , e20 , ..., en0 telleque :
e’1 ≤ e20 ≤ ... ≤ en0

Condition
Ensemble totalement ordonné

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

Exemple
relation d’ordre associé à la clé d’une relation en bases de données,
ordre sur N , ordre alphabétique, ... (mais pas de relation d’ordre
partiel)
Dans ce qui suit, la suite d’éléments est considérée rangée dans un
tableau.

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

Presentation du probleme de Tri

C’est un problème simple, connu et extrêmement courant.


De nombreuses solutions avec structures de données variées.
Sous-problème de problèmes complexes

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par sélection

Enoncé du problème
Entrée : un tableau d’entiers
Sortie : le même tableau, trié par ordre croissant

Principe
tant que il reste plus d’un élément non trié faire
- chercher le plus petit parmi les non triés ;
- échanger le premier élément non trié avec le plus petit trouvé;
Fin;

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par sélection- Exemple

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par sélection- Algorithme

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par sélection- Complexité

Choisissons comme opération élémentaire la comparaison de


deux cellules du tableau.
Le nombre de comparaisons "si A[k] < A[j] alors" est une valeur
qui ne dépend que de n (n est le nombre d’éléments du tableau).
la boucle "pour i de 0 jusquà n-2 faire" s’exécute n-1 fois,
et à chaque itération la boucle "pour k de i+1 jusquà n-1 faire"
exécute (n − 1 − (i + 1) + 1) fois la comparaison "si A[k] < A[j]]
alors".

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par sélection- Complexité

La complexité en nombre de comparaison est égale à la somme des


n-1 termes suivants
(i = 0, ...i = n − 2)
C = (n − 2) + 1 + (n − 3) + 1 + ..... + 1 + 0 =
n.(n − 1)
(n − 1) + (n − 2) + ... + 1 =
2
La complexité en nombre de comparaison est de de l’ordre
de n2 , que l’on écrit O(n2 ).

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par sélection- Complexité


Choisissons maintenant comme opération élémentaire
l’échange de deux cellules du tableau.
Le cas le plus mauvais est celui où le tableau est déjà classé mais
dans l’ordre inverse.
L’échange a lieu systématiquement dans la boucle principale "pour
i de 0 jusquà n-2 faire" qui s’exécute n-1 fois :
La complexité en nombre d’échanges de cellules est de l’ordre de n,
que l’on écrit O(n).
C’est un échange valant 3 affectations la complexité en transfert
est O(3n) = O(n)
Outre le nombre de comparaison, c’est le nombre d’affectations
d’indice qui représente une opération fondamentale et là les deux
versions ont exactement la même complexité O(n2 ).
Chapitre 2 Algorithmique Avancée et Compléxité
Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par sélection- Implementation en C

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par sélection- Video

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par insertion

Principe
Nous inserons, iterativement, le 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
Les éléments sont placés un à un directement à leur place
Attention
En inserant un élément dans la partie triée, il se pourrait qu’on ait
à déplacer plusieurs autres.

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par insertion- Exemple

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par insertion- Algorithme

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par insertion- Complexité


Comme nous n’avons pas necessairement a scanner toute la partie
deja triee, le pire cas, le meilleur cas et le cas moyen peuvent
differer entre eux
Meilleur cas: Chaque element est insere a la fin de la partie
triee. Dans ce cas, nous n’avons a deplacer aucun element.
Comme nous avons a inserer (n-1) elements, chacun generant
seulement une comparaison, la complexite est en O(n) .
Pire cas : Chaque element est insere au debut de la partie
trie. Dans ce cas, tous les elements de la partie triee doivent
etre deplaces a chaque iteration. La ieme iteration genere
(i − 1) comparaisons et echanges de valeurs:
Pn n(n − 1)
i=1 (i − 1) = = O(n2 )
2
Chapitre 2 Algorithmique Avancée et Compléxité
Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par insertion- Complexité

Attention
C’est le meme nombre de comparaison avec le tri par selection,
mais le tri par insertion effectue plus d’echanges de valeurs. Si les
valeurs a echanger sont importantes, ce nombre peut ralentir cet
algorithme d’une maniere significative.

Attention
On pourrait essayer d’améliorer cet algorithme en effectuant une
recherche dichotomique de la place où insérer l’élément j (dans la
première partie triée de la liste), mais la complexité resterait O(n)
en raison des déplacements effectués

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par insertion- Implementation en C

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri à bulle

Principe
L’idee de depart du tri a bulles consiste a se dire qu’un tableau trie
en ordre croissant, c’est un tableau dans lequel tout element est
plus petit que celui qui le suit.
Prenons chaque element d’un tableau, et comparons-le avec
l’element qui le suit:
Si l’ordre n’est pas bon, on permute ces deux elements et on
recommence jusqu’a ce que l’on n’ait plus aucune permutation a
effectuer.
Les elements les plus grands « remontent » ainsi peu a peu vers les
dernieres places, ce qui explique la denomination de « tri a bulle ».

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri à bulle
Principe
Mais il ne faut pas oublier un detail capital : quand devait on
s’arreter?
L’idee, c’est que nous declarons une variable boolenne,cette variable
va nous signaler le fait qu’il y a eu au moins une permutation
effectuee. Il faut donc :
Lui attribuer la valeur Vrai des qu’une seule permutation a ete
faite.
La remettre a Faux a chaque tour de la boucle principale.
Dernier point, il ne faut pas oublier de lancer la boucle
principale, et pour cela de donner la valeur Vrai a notre
variable booleenne au tout depart de l’algorithme.
Chapitre 2 Algorithmique Avancée et Compléxité
Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri à bulle- Algorithme

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri à bulle- Exemple

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri à bulle - Complexité

Dans le meilleur des cas, avec des données déjà triées, l’algorithme
effectura seulement n - 1 comparaisons. Sa complexité dans le
meilleur des cas est donc en O(n).
Dans le pire des cas, avec des données triées à l’envers, les parcours
successifs du tableau imposent d’effectuer:
C = (n − 2) + 1 + ([n − 1] − 2) + 1 + ..... + 1 + 0 =
n(n − 1)
(n − 1) + (n − 2) + ... + 1 =
2
On a donc une complexité dans le pire des cas du tri bulle en O(n2 ).

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri à bulle- Implémentation en C

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par fusion

Principe
Il s’agit d’un tri suivant le paradigme diviser pour régner. Le
principe du tri par fusion en est le suivant :
n
diviser la liste de n éléments à trier en deux sous-listes de
2
éléments
trier les deux sous-listes récursivement à l’aide du tri par fusion
fusionner les deux sous-listes triées pour produire la liste triée

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par fusion

Diviser pour regner


La construction de la solution d’un probleme par cette methode
s’effectue en trois phases :
Diviser le problème en un certain nombre de sous-problèmes.
Régner sur les sous-problèmes en les résolvant récursivement
Si la taille d’un sous-problème est assez réduite,on peut le
résoudre directement.
Combiner les solutions des sous-problèmes en une solution
complète pour le problème initial.

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par fusion - Algorithme

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par fusion - Exemple

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par fusion - Complexité

(
1 si n = 1,
C (n) = n
2C ( ) + n sinon
2
Dans le but de simplifier, nous supposons que n = 2k pour un
entier k ≥ 0, et on remplace O(n) par n .

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par fusion - Complexité


Donc:
n
C (n) = 2C ( ) + n
2
n
C (n) = 4C ( ) + 2n
4
n
C (n) = 8C ( ) + 3n
8
...
...
n
C (n) = 2k C ( k ) + kn
2
...
...
C (n) = nC (1) + nlog2 (n)
C (n) = n + nlog2 (n)
La complexite temporelle du tri par fusion est donc en O(nlog(n)) .
Chapitre 2 Algorithmique Avancée et Compléxité
Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par fusion - Implémentation en C

Implémenter l’algorithme de tri par fusion en C (On considère un


tableau de n éléments).

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par fusion - Implémentation en C

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri par fusion - Tri par selection

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri rapide

Principe
sélectionner un élément pivot p
partitionner la liste à trier en 2 sous- listes :
1 à gauche du pivot se retrouvent tous les éléments ≤ p
2 à droite du pivot se retrouvent tous les éléments > p
tri-rapide des 2 sous-listes
concaténation des listes triées

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri rapide - Exemple

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri rapide - Exemple

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri rapide - Exemple

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri rapide - Implémentation en C


Pivot : premier élément du tableau

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri rapide - Compléxité

A l’appel de quickSort, le pivot se place en position i. Ceci nous


laisse avec un probleme de tri de deux sous parties de taille i-1 et
n-i.
L’algorithme de partition clairement a une complexite au plus de cn
pour une constante c.
T (n) = T (i − 1) + T (n − i) + cn
T (1) = 1

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

le Tri rapide - Compléxité

Dans le pire des cas: Le pivot est à chaque fois le plus petit
élément. La relation de recurrence devient
T (n) = T (n − 1) + cn
T (n − 1) = T (n − 2) + c(n − 1)
T (n − 2) = T (n − 3) + c(n − 2)
.......
T (2) = T (1) + c(2)
En ajoutant membre à membre on obtient :
T (n) = O(n2 )

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

Comparaison des Compléxités

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

Conclusion

Tris Stables:
Tri rapide et tri fusion : efficaces
Tri par insertion : excellent si liste initiale presque triée
Tri par sélection donne le début de liste trié avant la fin du tri
Tri par insertion peut débuter sans liste initiale complète

Chapitre 2 Algorithmique Avancée et Compléxité


Tri par sélection
Tri par insértion
Tri à bulle
Algorithmes de Tri Tri par fusion
Tri rapide
Conclusion
Exercice

Exercice : Tri Radix


Le tri Radix s’appuie sur la représentation binaire des éléments à
trier.
1 On sépare le tableau à trier en deux sous-tableaux
2 L’un ne contient que les éléments dont le bit de poids faible
vaut 0
3 L’autre ne contient que les éléments dont le bit de poids faible
vaut 1
4 On met bout à bout le sous-tableau 0, puis le sous-tableau 1
5 On répète les étapes ci-dessus pour le 2ème bit, puis le 3ème
(du moins au plus significatif), jusqu’à avoir parcouru tous les
bits significatifs.
Trier le tableau [7, 5, 1, 9, 2]
Chapitre 2 Algorithmique Avancée et Compléxité

Vous aimerez peut-être aussi