Tri rapide
Exercice · OCaml (option informatique), chapitre 9 — Algorithmique : les tris
É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.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.