Trois nombres à ranger
Exercice supplémentaire · niveau 3 (difficile) · sciences numériques et technologie (seconde), chapitre 3 — Instructions conditionnelles · Indentation et conditions imbriquées
Énoncé
Écrire une fonction trier3(a, b, c) qui renvoie les trois nombres rangés dans l'ordre croissant, sans utiliser sorted ni max. Combien de comparaisons votre solution effectue-t-elle au pire ?
Corrigé
def trier3(a, b, c):
if a > b:
a, b = b, a # désormais a <= b
if b > c:
b, c = c, b # désormais c est le plus grand
if a > b:
a, b = b, a # on replace a et b
return a, b, c
print(trier3(5, 2, 9)) # (2, 5, 9)
print(trier3(9, 5, 2)) # (2, 5, 9)
Trois comparaisons suffisent, et le troisième test est indispensable : sur , après les deux premiers échanges on a , qui n'est pas trié.
On peut démontrer que trois comparaisons sont aussi le minimum : il y a ordres possibles, et chaque comparaison ne distinguant que deux cas, comparaisons ne peuvent séparer que situations. Or .
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.