Adloun

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.