Tri par sélection

Écrire une fonction tri_selection qui prend en paramètre un tableau tableau de nombres entiers et qui trie ce tableau en place (c'est-à-dire que le tableau est modifié) par ordre croissant des valeurs.

On utilisera l'algorithme suivant :

  • On parcourt le tableau de gauche à droite :
    • on recherche le minimum du tableau entre cette position courante et la fin du tableau
    • on échange alors les 2 valeurs
Exemples
🐍 Console Python
>>> tab = [1, 52, 6, -9, 12]
>>> tri_selection(tab)
>>> tab
[-9, 1, 6, 12, 52]
🐍 Console Python
>>> tab_vide = []
>>> tri_selection(tab_vide)
>>> tab_vide
[]
🐍 Console Python
>>> singleton = [9]
>>> tri_selection(singleton)
>>> singleton
[9]
###
# testsbksl-nlbksl-nltab = [1, 52, 6, -9, 12]bksl-nltripy-undselection(tab)bksl-nlassert tab == [-9, 1, 6, 12, 52], "Exemple 1"bksl-nlbksl-nltabpy-undvide = []bksl-nltripy-undselection(tabpy-undvide)bksl-nlassert tabpy-undvide == [], "Exemple 2"bksl-nlbksl-nlsingleton = [9]bksl-nltripy-undselection(singleton)bksl-nlassert singleton == [9], "Exemple 3"bksl-nlbksl-nlbksl-nl# Autres testsbksl-nlbksl-nlfrom random import samplebksl-nlbksl-nlfor i in range(10):bksl-nl nombres = list(sample(range(10py-strpy-str9), 100 + i))bksl-nl attendu = sorted(nombres)bksl-nl tripy-undselection(nombres)bksl-nl assert len(nombres) == len(bksl-nl attendubksl-nl ), "Erreur, le tableau ne doit pas changer de taille"bksl-nl for (bksl-nl a,bksl-nl b,bksl-nl ) in zip(nombres, attendu):bksl-nl assert a == b, "Erreur lors du tri"bksl-nlbksl-nl 5/5

def tripy-undselection(tableau):bksl-nl ...bksl-nlbksl-nlbksl-nl# testsbksl-nlbksl-nltab = [1, 52, 6, -9, 12]bksl-nltripy-undselection(tab)bksl-nlassert tab == [-9, 1, 6, 12, 52], "Exemple 1"bksl-nlbksl-nltabpy-undvide = []bksl-nltripy-undselection(tabpy-undvide)bksl-nlassert tabpy-undvide == [], "Exemple 2"bksl-nlbksl-nlsingleton = [9]bksl-nltripy-undselection(singleton)bksl-nlassert singleton == [9], "Exemple 3"bksl-nlbksl-nldef positionpy-undminimum(tableau, i):bksl-nl "recherche et renvoie l'indice du minimum à partir de l'indice i"bksl-nl indpy-undmini = ibksl-nl for j in range(i + 1, len(tableau)):bksl-nl if tableau[j] < tableau[indpy-undmini]:bksl-nl indpy-undmini = jbksl-nl return indpy-undminibksl-nlbksl-nlbksl-nldef echange(tableau, i, j):bksl-nl tableau[i], tableau[j] = tableau[j], tableau[i]bksl-nlbksl-nlbksl-nldef tripy-undselection(tableau):bksl-nl for i in range(len(tableau)):bksl-nl indicepy-undminimum = positionpy-undminimum(tableau, i)bksl-nl echange(tableau, indicepy-undminimum, i)bksl-nlbksl-nl

A

Z