OCaml (option informatique) · Chapitre 9 · Exercice de TD
Tri rapide
Algorithmique : les tris · niveau 2
Énoncé
Écrire partition et tri_rapide, et donner un cas où il dégénère en .
Corrigé
let rec partition pivot l =
match l with
| [] -> ([], [])
| x :: reste ->
let (inf, sup) = partition pivot reste in
if x < pivot then (x :: inf, sup) else (inf, x :: sup)
let rec tri_rapide l =
match l with
| [] -> []
| pivot :: reste ->
let (inf, sup) = partition pivot reste in
tri_rapide inf @ [pivot] @ tri_rapide sup
Sur une liste déjà triée, la tête (pivot) est toujours le plus petit : inf est vide et sup contient tout le reste. La récursion ne réduit la taille que de par étage, d'où . Choisir un meilleur pivot (médiane, aléatoire) évite ce travers.
Exercices semblables
- Tri par insertion complet corrigé
- Tri fusion corrigé
- Tri par sélection en place corrigé
- Valider un tri corrigé
- Le tri par dénombrement corrigé