Adloun

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.