Vincent Neiger et Henri Lastakowski 2010–2011
Matlab – TP no10
Le problème du tri
1 Problème du pâtissier
Il s’agit dans cet exercice de simuler avec les outils que vous connaissez (tableaux, boucles.. . )
la situation suivante :
Un pâtissier est face à une pile de crêpes de différentes tailles.
Il dispose d’une spatule avec laquelle il peut retourner les ppremières crêpes du haut de la
pile, avec pquelconque. Son objectif est d’avoir une pile de crêpes empilées par ordre croissant
de taille.
Q 1.a) Écrivez d’abord une fonction retourner qui prend comme argument un
tableau et un nombre entier p, et qui retourne les ppremières crêpes du haut de la pile.
Q 1.b) Réfléchissez à un algorithme permettant de trier la pile de crêpes.
Q 1.c) Écrivez une fonction (ou plusieurs fonctions) permettant de trier la pile de
crêpe à partir de cet algorithme.
2 Tri par sélection
Le but est d’écrire une fonction matlab tri_selection qui réalise le tri d’un tableau
d’entiers. Autrement dit, elle prend en entrée un tableau d’entiers relatifs et renvoie en sortie
le tableau trié correspondant. On va utiliser une méthode spécifique appelée tri par sélection.
Par exemple, l’appel tri_selection([1 3 -4 -2 7 9 10 3]) devra renvoyer le tableau
suivant : [-4-21337910].
Q 2.a) Écrivez un algorithme echange qui, étant donné un tableau vde nentiers et
deux entiers iet jcompris entre 1et n, permute les deux éléments d’indices iet jdu tableau v.
Implantez cet algorithme en matlab.
Q 2.b) Écrivez un algorithme minimum_partiel qui, étant donné un tableau vde
nentiers et deux entiers i, j tels que 16i6j6n, recherche l’indice kdu minimum des
éléments de vtel que kvérifie i6k6j. Si le minimum est atteint plusieurs fois, on fera le
choix de renvoyer le plus petit des indices kqui conviennent.
Implantez cet algorithme en matlab.
Question subsidiaire : quel changement mineur est suffisant pour que l’algorithme, au lieu
de renvoyer le plus petit, renvoie le plus grand des indices kqui conviennent ?
Q 2.c) Écrivez, à l’aide des deux algorithmes echange et minimum_partiel, un
algorithme de tri que vous appellez tri_selection.
Implantez cet algorithme en matlab et testez-le sur plusieurs exemples bien choisis.