L2S3 Harmonisation Algorithmique 2015–2016
UFR d’IEEA – Université Lille 1
TP : Tri Rapide
Dans ce TP vous pouvez utiliser les fonctions données dans le fichier permutation.py
disponible sur le portail.
1 Principe
Le tri rapide, ou quicksort, est fondé comme le tri par fusion sur le paradigme "diviser
pour régner". C’est en effet également un algorithme récursif qui procède en divisant le
tableau en deux sous-tableaux, les tri (récursivement) et recombine les deux parties.
La différence entre ces deux algorithmes de tri réside dans la manière de diviser le
tableau puis de recombiner. Contrairement au tri par fusion, l’étape la plus coûteuse du
tri rapide, donc celle où s’effectue tout le travail, est la division en deux sous tableaux.
La recombinaison et immédiate et ne nécessite aucun travail.
De plus le tri rapide est un tri "en place" ou "sur place" : un espace mémoire constant
en plus du tableau à trier est suffisant pour effectuer ce tri.
De manière plus détaillée le principe du tri rapide est le suivant :
1. Diviser/Partitionner : Un élément du tableau est choisi arbitrairement, on appel
cet élément le pivot. La division consiste à placer tous les éléments de valeur infé-
rieure à celle du pivot au début du tableau et tous les supérieurs en fin de tableau.
Les éléments de valeur égale au pivot se trouvent au milieu. Le tableau est donc
divisé en trois parties : les éléments inférieurs, égaux puis supérieurs au pivot.
2. Trier : Il s’agit simplement de trier récursivement les deux parties contenant les
éléments inférieurs et supérieurs au pivot.
3. Recombiner : Rien à faire, le tableau est déjà trié !
2 Choix du pivot
Comme vous le verrez dans la suite du TP choisir une bonne valeur de pivot est très
important pour avoir la meilleur complexité possible. Cependant choisir le pivot optimal
à chaque appel récursif nécessite presque autant d’opérations que pour trier le tableau,
c’est pourquoi on choisit en général une valeur aléatoirement dans le tableau.
Q1 . Ecrivez la fonction pivot retournant une valeur ( pas un indice !) choisie aléatoi-
rement dans le tableau tentre les indices det f, où t,det fsont donnés en paramètre.
3 Partition
Il y a plusieurs méthodes pour écrire un algorithme itératif de partition, l’une d’elles
consiste à maintenir quatre zones délimitées par trois indices, a,bet c, comme illustré sur
la Figure 1 :
1. les éléments inférieurs au pivot se trouvent aux indices strictement inférieurs à a,
1