Tri par Insertion
On cherche à implémenter le tri par insertion, comme vu dans la partie précédente
Question
Écrire la fonction insertion, telle que :
Entrées :
Une liste
l, de typelist, de valeurs comparables avec '<'Un entier
i, compris entre0etlen(l)et tel quel[:i]est triée
Sortie : Aucune
Effet : Insert la valeur contenue à l'indice
idansl[:i], en respectant l'ordre, et décale les valeurs au besoins.
Solution
def insertion(l, i):
valeur = l[i]
j = 0
while j < i and l[j] < valeur:
j += 1
while j <= i:
valeur, l[j] = l[j], valeur
j += 1
Question
En utilisant des assert, écrire des tests pertinents et suffisant pour vérifier le bon fonctionnement de insertion.
Solution
l = [1, 6, 2, 4]
insertion(l, 0)
assert l == [1, 6, 4, 2]
insertion(l, 1)
assert l == [1, 6, 4, 2]
insertion(l, 2)
assert l == [1, 4, 6, 2]
insertion(l, 3)
assert l == [1, 2, 4, 6]
Question
Écrire la fonction tri_insertion, telle que :
Entrée :
Une liste
l, de typelist, de valeurs comparables avec '<'
Sortie : Aucune
Effet : Trie la liste, en utilisant la méthode du tri par insertion.
Solution
def tri_insertion(l: list):
for i in range(1, len(l)):
insertion(l, i)
Question
En utilisant des assert, écrire des tests pertinents et suffisant pour vérifier le bon fonctionnement de tri_insertion.
Solution
l = []
tri_insertion(l)
assert l == []
l = [1]
tri_insertion(l)
assert l == [1]
l = [1, 2]
tri_insertion(l)
assert l == [1, 2]
l = [2, 1]
tri_insertion(l)
assert l == [1, 2]
l = [1, 2, 4, 6]
tri_insertion(l)
assert l == [1, 2, 4, 6]
l = [1, 6, 2, 4]
tri_insertion(l)
assert l == [1, 2, 4, 6]