# 04 — L'Annuaire **Algorithmes :** Tri par insertion + Recherche dichotomique **Difficulté :** Moyen **Durée estimée :** 1h — 1h15 --- ## Contexte Vous créez un mini-annuaire de contacts. Il doit toujours rester **trié par nom** pour que la recherche dichotomique fonctionne. Chaque fois qu'on ajoute un contact, on l'insère directement à la bonne place (comme dans le tri par insertion). Chaque fois qu'on cherche, on utilise la dichotomie. --- ## Étapes ### Étape 1 — Afficher l'annuaire Lancez le starter, vérifiez que `afficher_annuaire()` fonctionne. ### Étape 2 — Implémenter `ajouter_contact(annuaire, contact)` Cette fonction insère le nouveau contact **à la bonne position** pour maintenir l'ordre alphabétique. > **Indication** : c'est le principe du tri par insertion, mais appliqué à un seul élément. On parcourt depuis la fin et on décale les contacts dont le nom est alphabétiquement après le nouveau. > > Pour comparer des chaînes alphabétiquement en Python : `"Dupont" < "Martin"` → `True` ### Étape 3 — Implémenter `rechercher(annuaire, nom)` Recherche dichotomique : retourne le contact (dictionnaire complet) si trouvé, `None` sinon. ### Étape 4 — Menu interactif Complétez la boucle `menu()` pour que l'utilisateur puisse : - `1` — Afficher tous les contacts - `2` — Ajouter un contact - `3` — Rechercher un contact par nom - `4` — Quitter ### Étape 5 — Extension (si vous avez le temps) Ajoutez une option `5` pour supprimer un contact par nom (cherchez-le d'abord avec la dichotomie, puis supprimez-le de la liste). --- ## Ce que vous devez rendre - Le programme avec le menu fonctionnel - Réponse : dans quel cas la dichotomie est-elle inutilisable directement ?