Vincent Neiger et Henri Lastakowski 2010–2011 Matlab – TP no 10 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 p premières crêpes du haut de la pile, avec p quelconque. 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 p premiè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 -2 1 3 3 7 9 10]. Q 2.a) Écrivez un algorithme echange qui, étant donné un tableau v de n entiers et deux entiers i et j compris entre 1 et n, permute les deux éléments d’indices i et j du tableau v. Implantez cet algorithme en matlab. Q 2.b) Écrivez un algorithme minimum_partiel qui, étant donné un tableau v de n entiers et deux entiers i, j tels que 1 6 i 6 j 6 n, recherche l’indice k du minimum des éléments de v tel que k vérifie i 6 k 6 j. Si le minimum est atteint plusieurs fois, on fera le choix de renvoyer le plus petit des indices k qui 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 k qui 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. Matlab – TP no 10 3 Le problème du tri 2/2 Tri par insertion Le but est d’écrire une fonction matlab tri_insertion 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 insertion. Par exemple, l’appel tri_insertion([1 3 -4 -2 7 9 10 3]) devra renvoyer le tableau suivant : [-4 -2 1 3 3 7 9 10]. Q 3.a) Écrivez un algorithme insere qui, étant donné un tableau v de n entiers, un entier i tel que 1 6 i 6 n et un entier quelconque a, insère a dans le tableau v « entre les éléments d’indices i − 1 et i ». Plus précisément, si v 0 est le résultat de l’opération, si 1 6 k 6 i − 1 v(k) 0 a si k = i v (k) = v(k − 1) si i + 1 6 k 6 n + 1 Implantez cet algorithme en matlab. Q 3.b) Écrivez un algorithme recherche_dichotomique qui, étant donné un tableau v trié en ordre croissant et un entier a, renvoie l’indice (unique) i tel que 2 6 i 6 n et v(i − 1) < a 6 v(i) (autrement dit, le plus petit indice i tel que v(i − 1) 6 a 6 v(i)). Implantez cet algorithme en matlab. Q 3.c) Écrivez, à l’aide des deux algorithmes insere et recherche_dichotomique, un algorithme de tri que vous appellez tri_insertion. Implantez cet algorithme en matlab et testez-le sur plusieurs exemples bien choisis. Si vous avez fini et ne savez pas quoi faire, nous avons de quoi vous occuper, il suffit de demander !