Adloun

Le tri par comptage stable, et le tri par base

Exercice · informatique (tronc commun des prépas scientifiques), chapitre 9 — Les tris

Énoncé

Implémenter le tri par comptage stable par positions cumulées et l'utiliser pour réaliser un tri par base de nombres inférieurs à 1000.

Corrigé

def tri_comptage_stable(fiches: list, cle, k: int) -> list:
    effectifs = [0] * k
    for f in fiches:
        effectifs[cle(f)] += 1
    # Cumul des positions pour trouver l'indice de départ de chaque clé
    debut = [0] * k
    for v in range(1, k):
        debut[v] = debut[v - 1] + effectifs[v - 1]
    r = [None] * len(fiches)
    for f in fiches:
        r[debut[cle(f)]] = f
        debut[cle(f)] += 1
    return r

def tri_par_base(t: list) -> list:
    # passes successives stables sur les unités, dizaines et centaines
    r = tri_comptage_stable(t, lambda x: x % 10, 10)
    r = tri_comptage_stable(r, lambda x: (x // 10) % 10, 10)
    return tri_comptage_stable(r, lambda x: x // 100, 10)

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.