Tri par sélection
On cherche à implémenter le tri par sélection, comme vu dans la partie précédente.
Question
Écrire la fonction echange, telle que :
Entrées :
Une liste
l, de typelist, de valeurs comparables avec '<'Un entier
i, compris entre0etlen(l)Un entier
j, compris entre0etlen(l)
Sortie : Aucune
Effet : Échange les valeurs de
laux indicesietj
Solution
def echange(l: list, i: int, j: int):
valeur_i = l[i]
valeur_j = l[j]
l[i] = valeur_j
l[j] = valeur_i
Question
En utilisant des assert, écrire des tests pertinents et suffisants pour vérifier le bon fonctionnement de echange.
Solution
l = [1, 6, 4, 2]
echange(l, 0, 1)
assert l == [6, 1, 4, 2]
echange(l, 0, 0)
assert l == [6, 1, 4, 2]
echange(l, 1, 3)
assert l == [6, 2, 4, 1]
Question
Écrire la fonction indice_min, telle que :
Entrées :
Une liste
l, de typelist, de valeurs comparables avec '<'Un entier
i, compris entre0etlen(l)
Sortie : L'indice du minimum de
l[i:], la fin delcommençant eniEffet : Aucun
Solution
def indice_min(l: list, i: int) -> int:
i_min = i
for j in range(i+1, len(l)):
if l[j] < l[i_min]:
i_min = j
return i_min
Question
En utilisant des assert, écrire des tests pertinents et suffisants pour vérifier le bon fonctionnement de indice_min.
Solution
l = [1, 6, 2, 4]
assert indice_min(l, 0) == 0
assert indice_min(l, 1) == 2
assert indice_min(l, 2) == 2
assert indice_min(l, 3) == 3
Question
Écrire la fonction tri_selection, 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 sélection.
Solution
def tri_selection(l: list):
for i in range(len(l)):
indice = indice_min(l, i)
echange(l, i, indice)
Question
En utilisant des assert, écrire des tests pertinents et suffisants pour vérifier le bon fonctionnement de tri_selection.
Solution
l = []
tri_selection(l)
assert l == []
l = [1]
tri_selection(l)
assert l == [1]
l = [1, 2]
tri_selection(l)
assert l == [1, 2]
l = [2, 1]
tri_selection(l)
assert l == [1, 2]
l = [1, 2, 4, 6]
tri_selection(l)
assert l == [1, 2, 4, 6]
l = [1, 6, 2, 4]
tri_selection(l)
assert l == [1, 2, 4, 6]