Compter les inversions en
Exercice · informatique (tronc commun des prépas scientifiques), chapitre 9 — Les tris
Énoncé
Modifier l'algorithme du tri fusion pour compter le nombre d'inversions d'un tableau en étapes.
Corrigé
Lors de la fusion des listes triées a et b, si b[j] < a[i], cela signifie que b[j] est strictement inférieur à tous les éléments restants de a (qui sont situés à sa gauche dans le tableau global). On ajoute donc le nombre d'éléments restants dans a, soit len(a) - i.
def tri_et_inversions(t: list) -> tuple:
if len(t) <= 1:
return (list(t), 0)
m = len(t) // 2
a, inv_a = tri_et_inversions(t[:m])
b, inv_b = tri_et_inversions(t[m:])
r, i, j, inv = [], 0, 0, inv_a + inv_b
while i < len(a) and j < len(b):
if a[i] <= b[j]:
r.append(a[i]); i += 1
else:
r.append(b[j]); j += 1
inv += len(a) - i
return (r + a[i:] + b[j:], inv)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.