Exercices
Exercice 1 : Quel tri ?
On considère le tableau \([6,\,1,\,4,\,5,\,2,\,3]\). Après la première itération d'un tri, on obtient le tableau : \([1,\,6,\,4,\,5,\,2,\,3]\)
- On a utilisé un tri par insertion
- On a utilisé un tri par sélection
- On a utilisé un tri par insertion ou par sélection
- Lors de la première itération on échange les valeurs d'indices \(0\) et \(1\)
- Lors de la première itération on insère le minimum, a valeur \(1\), à sa place correcte à gauche
- C'est juste, voir les deux premières questions
Exercice 2 : Quel tri ?
On considère le tableau \([6,\,1,\,4,\,5,\,2,\,3]\). Après la première itération d'un tri, on a obtenu le tableau : \([1,\,6,\,4,\,5,\,2,\,3]\). Après la deuxième itération du tri :
- par sélection, on obtient le tableau : \([1,\,2,\,6,\,4,\,5,\,3]\)
- par sélection, on obtient le tableau : \([1,\,2,\,4,\,5,\,6,\,3]\)
- par insertion, on obtient le tableau : \([1,\,4,\,6,\,5,\,2,\,3]\)
- par insertion, on obtient le tableau : \([1,\,2,\,4,\,5,\,3,\,6]\)
- On sélectionne la valeur minimale, le \(2\) à l'indice \(4\) et on l'échange avec le \(6\) à l'indice \(1\)
- Voir réponse ci-dessus
- On insère la valeur d'indice \(2\) au bon endroit
- Voir réponse ci-dessus
Exercice 3 : Quel tri ?
On considère le tableau \([5,\,4,\,3,\,2,\,1]\).
Après deux itérations :
- du tri par sélection on obtient le tableau : \([1,\,2,\,3,\,4,\,5]\)
- du tri par sélection on obtient le tableau : \([1,\,2,\,5,\,4,\,3]\)
- du tri par insertion on obtient le tableau : \([3,\,4,\,5,\,2,\,1]\)
- du tri par insertion on obtient le tableau : \([1,\,2,\,3,\,5,\,4]\)
- étape 1 : \([1,\,4,\,3,\,2,\,5]\), étape 2 : \([1,\,2,\,3,\,4,\,5]\)
- étape 1 : \([4,\,5,\,3,\,2,\,1]\), étape 2 : \([3,\,4,\,5,\,2,\,1]\)
Exercice 4 : Quel tri ?
On considère les fonctions suivantes dont certaines sont incorrectes.
def tri_A(tableau):
for i in range(len(tableau) - 1):
i_mini = i
for j in range(i + 1, len(tableau)):
if tableau[j] < tableau[i_mini]:
i_mini = j
tableau[i], tableau[i_mini] = tableau[i_mini], tableau[i]
def tri_B(tableau):
for i in range(len(tableau) - 1):
i_mini = i
for j in range(i + 1, len(tableau) - 1):
if tableau[j] < tableau[i_mini]:
i_mini = j
tableau[i], tableau[i_mini] = tableau[i_mini], tableau[i]
def tri_C(tableau):
for i in range(1, len(tableau)):
valeur_a_inserer = tableau[i]
j = i
while j > 0 and tableau[j - 1] > valeur_a_inserer:
tableau[j] = tableau[j - 1]
j = j + 1
tableau[j] = valeur_a_inserer
def tri_D(tableau):
for i in range(1, len(tableau)):
valeur_a_inserer = tableau[i]
j = i
while j > 0 and tableau[j - 1] > valeur_a_inserer:
tableau[j] = tableau[j - 1]
j = j - 1
tableau[j] = valeur_a_inserer
- La fonction
tri_A
met en œuvre un tri par sélection - La fonction
tri_A
met en œuvre un tri par insertion - La fonction
tri_B
met en œuvre un tri par sélection - La fonction
tri_B
met en œuvre un tri par insertion - La fonction
tri_C
met en œuvre un tri par sélection - La fonction
tri_C
met en œuvre un tri par insertion - La fonction
tri_D
met en œuvre un tri par sélection - La fonction
tri_D
met en œuvre un tri par insertion
- Il faudrait
for j in range(i + 1, len(tableau)):
pour lire la dernière valeur du tableau - Il faudrait
j = j - 1
car on prend la valeur se trouvant à gauche pour la décaler vers la droite
Exercice 5 : Coût des algorithmes
On étudie les coûts des algorithmes en fonction de la longueur des données et dans le pire des cas.
- Le coût du tri par sélection est linéaire
- Le coût du tri par sélection est logarithmique
- Le coût du tri par sélection est quadratique
- Pour une entrée de grande taille, un algorithme de coût linéaire est plus avantageux qu'un algorithme de coût logarithmique
- Pour une entrée de grande taille, un algorithme de coût logarithmique est plus avantageux qu'un algorithme de coût quadratique
Exercice 6 : Combien d'échanges ?
On considère la fonction suivante triant un tableau. Le pire des cas de l'algorithme mis en œuvre est celui d'un tableau initialement trié dans l'ordre décroissant.
Combien d'échanges sont effectués pour trier un tableau de taille \(10\) dans le pire des cas ?
def tri(tab) :
for i in range (1, len(tab)) :
for j in range (len(tab) - i) :
if tab[j] > tab[j + 1] :
tab[j], tab[j + 1] = tab[j + 1], tab[j]
- \(10\)
- \(45\)
- \(55\)
- \(100\)
Lors de la première itération de la boucle principale il y aura \(9\) échanges, \(8\) dans la suivante puis \(7\), \(6\), ... \(1\).
Au total il y aura donc \(9+8+7+6+\dots+1=45\) échanges.
Exercice 7 : Tri par sélection dans l'ordre décroissant
Compléter la fonction tri_selection_decr
prenant en argument un tableau
et le triant en place à l'aide du tri par sélection dans l'ordre décroissant.
Exercice 8 : Tri par insertion dans l'ordre décroissant
Compléter la fonction tri_insertion_decr
prenant en argument un tableau
et le triant en place à l'aide du tri par insertion dans l'ordre décroissant.
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)
Crédits⚓︎
Auteurs : Nicolas Revéret, Mireille COILHAC
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)