Informatique Cours 4.2 Tri rapide (quick sort)
Lycée Jules Ferry Cannes Page 4 sur 4 TSI2
4 Performances des algorithmes
Complexité
Le « coût » temporel de l’algorithme de tri est principalement donné par des opérations de comparaison
sur les éléments à trier.
On raisonne dans la suite sur le nombre de données à traiter pour l’analyse de la complexité de
l’algorithme.
- Dans le pire des cas, un des deux segments est vide à chaque appel de la fonction segmenter.
Cela arrive lorsque le tableau est déjà trié.
Le nombre de données à traiter pour le i
e
appel, est n – i.
Le nombre total pour n appels de fonction est donc
(relation de récurrence du type
C(n) = C(n-1) + n – 1).
La complexité est donc de classe quadratique C(n) = O(n²).
- Dans le meilleur des cas, les deux segments sont de taille égale. Pour un nombre de données
traiter n, chacun des segments suivant a donc au plus
éléments (on retire le pivot). Il faut n-1
itérations pour réaliser la partition nécessaire au rang suivant n.
On peut ainsi écrire une relation de récurrence du type =–1+2∗
.
La complexité est donc de classe quasi linéaire C(n)=O(n.log(n)) (voir annexes du cours 2).
Bilan des complexités temporelle du tri rapide
L'algorithme de tri rapide a donc des performances comparables au tri par insertion du point de vue des
complexités.
En pratique
Liste non triée
L'algorithme de tri rapide est plus rapide lorsque la probabilité de se trouver dans le pire des cas est
aléatoire (liste pas du tout triée).
Liste triée
Par contre l'algorithme de tri par insertion reste plus rapide pour des listes quasi-triées.
L'algorithme de tri rapide est à peine fonctionnel sur spyder pour une liste quasi-triée (avec
position du pivot en début de tableau) car les limites des appels récursifs sont rapidement atteintes
(n≈1000).
Une solution pour gagner en rapidité (et en nombres d'appels récursifs) avec le tri rapide est
paradoxalement de choisir des pivots à des positions aléatoires dans chaque partition. Il faut ensuite
échanger le pivot obtenu avec le premier élément du tableau afin de retomber sur les algorithmes
précédents (pivot à gauche).
Ressources :
Damien Broizat
Patrick Beynet –UPSTI-