Feuille de TD 4

publicité
Univ. Lille1 - Licence ST-A 1ère année
2009-2010
Algorithmes et Programmation Impérative 1
Trier un tableau
1
Exercices
Exercice 4-1
Variante du tri par sélection
Nous avons présenté le tri par sélection du plus petit élément de la tranche restant à trier. Il
est possible aussi de faire un tri par sélection du plus grand élément.
Question 1 Donnez l'algorithme de tri par sélection du plus grand élément.
Question 2 Implantez cet algorithme pour réaliser une procédure qui trie par cette méthode le tableau
passé en paramètre.
Exercice 4-2
Tri à bulle
L'algorithme 4.1 est un algorithme de tri dénommé tri à bulles qui est une certaine forme de
tri par sélection du minimum.
Algorithme 4.1 Algorithme du tri à bulles
Entrée : t un tableau de longueur n.
Sortie : t un tableau trié de longueur n contenant les mêmes éléments.
1: pour i variant de 0 à n − 2 faire
2:
3:
4:
5:
6:
7:
8:
9:
10:
{mettre le plus petit élément de la tranche t(i..n − 1) en position i}
pour j variant de n − 1 à i + 1 en décroissant faire
si t(j) < t(j − 1) alors
échanger t(j) et t(j − 1)
n si
n pour
{La tranche t(0..i) est triée et ses éléments sont inférieurs ou égaux
à tous les autres éléments de t.}
n pour
{la tranche t(0..n − 1) est triée.}
Question 1 Donnez les états successifs du tableau à la n de chaque étape de la boucle pour située
des lignes 3 à 7 lorsque i = 0 et le tableau à trier est
0
t= T
1
I
2
3
4
M O L
5
6
7
E O N
.
Question 2 Même question pour la n de chaque étape de la boucle pour située des lignes 1 à 9.
Question 3 Combien de comparaisons d'éléments du tableau sont-elles eectuées lors du tri d'un
tableau de longueur n ?
Question 4 Si lors d'une étape de la boucle pour principale, aucun échange n'est eectué dans la
boucle pour interne, c'est que le tableau est trié. Il est donc inutile de poursuivre la boucle externe.
1
Décrivez un algorithme qui tient compte de cette remarque.
Question 5 Combien de comparaisons d'éléments du tableau sont-elles eectuées lors du tri d'un
tableau de longueur n avec cette variante du tri à bulles ? Décrivez le meilleur et le pire des cas.
Question 6 Réalisez une procédure qui trie le tableau passé en paramètre selon cet algorithme.
Exercice 4-3
On modie l'algorithme de tri par insertion en eectuant la boucle dans l'ordre décroissant
des indices :
Entrée : t un tableau de longueur n.
Sortie : t un tableau trié de longueur n contenant les mêmes éléments.
1: pour i variant de n − 1 à 1 en décroissant faire
2:
inserer t(i) dans t(0..i)
3:
n pour
Question 1 quel est le tableau que l'on obtient lorsque cet algorithme est appliqué à
0
t= T
1
I
2
3
4
M O L
5
6
7
E O N
?
Question 2 Qu'obtient-on si on applique cet algorithme sur un tableau trié dans l'ordre croissant ?
décroissant ?
Exercice 4-4 Trier les caractères d'une chaîne de caractères
Réalisez avec l'algorithme de votre choix une fonction trie_chaine de type string → string
qui construit la chaîne de caractères obtenues en triant les caractères de la chaîne passée en
paramètre.
Exercice 4-5 Passage de l'opérateur de comparaison en paramètre
Les algorithmes de tris sont exposés en utilisant la relation ≤ entre éléments du tableau. Les
implantations en Caml peuvent se faire en utilisant l'opérateur polymorphe <= qui, rappelons-le,
est de type
0
a → 0 a → bool.
Dans certaines situations, nous pouvons être amenés à ne pas utiliser cet opérateur prédéni,
mais un autre opérateur déni par nos soins.
Question 1 Réalisez une fonction de tri qui, outre le tableau à trier, prend aussi la fonction de
comparaison en paramètre. Le type de cette fonction est donc
(0 a → 0 a → bool) → 0 a array → 0 a array1 .
De cette façon le tri d'un tableau d'entiers dans l'ordre croissant s'obtient par l'appel suivant
# tri [|3;1;4;1;5;9;2|] (<=) ;;
- : int array = [|1; 1; 2; 3; 4; 5; 9|]
et le tri dans l'ordre décroissant s'obtient par
# tri [|3;1;4;1;5;9;2|] (>=) ;;
- : int array = [|9; 5; 4; 3; 2; 1; 1|]
1 ou bien 0 a array → (0 a → 0 a → bool) → 0 a array
2
Question 2 Soit t un tableau de couples dont la première composante est une chaîne de caractères, et
la seconde un nombre entier. On veut trier le tableau par valeurs croissantes des premières composantes,
et en cas d'égalité par valeurs croissantes des secondes composantes.
Donnez une expression permettant de le faire.
3
Téléchargement