UM2 - Faculté des Sciences – Feuille TD HLIN301– Septembre 2014 1
Tri de Tableaux
1. Ecrire un algorithme qui, étant donné 2 tableaux d’entier non triés Aet B, de taille respective net p, compte
le nombre d’entiers appartenant à la fois à Aet à B. Quelle est sa complexité en nombre de comparaisons entre
éléments de tableaux.
Améliore-t-on cette complexité si l’un des tableaux est trié et si oui, précisez lequel.
Améliore-t-on également cette complexité si les 2 tableaux sont triés ?
2. (*) Étant donné un tableau on cherche l’élément le plus fréquent dans T. Donnez un algorithme dans le cas
général, puis dans le cas où le tableau est trié. Vous donnerez les complexités dans chacun des cas.
3. Donnez un algorithme vérifiant si tous les éléments d’un tableau sont différents. Donnez un deuxième algorithme
comptant le nombre d’éléments différents d’un tableau.
4. Le Tri par fusion est un autre algorithme de tri appliquant le principe Diviser pour résoudre. Son principe pour
trier un tableau à néléments est :
trier le sous-tableau constitué des n/2premiers éléments
trier le sous-tableau constitué des n/2derniers éléments
fusionner les éléments des 2 sous-tableaux triés.
Ecrivez et prouvez cet algorithme. Donnez sa complexité dans le pire et dans le meilleur des cas.
5. Le problème du Drapeau Hollandais consiste à trier un tableau dont les éléments ne peuvent prendre que 3
valeurs que l’on notera R, V, B avec l’ordre R < V < B. Donnez un algorithme linéaire pour ce problème.
6. On s’intéresse au problème de tri particulier suivant : les éléments à trier prennent leur valeur dans un
intervalle fini et «petit» connu a priori. On prendra comme exemple le tri d’un tableau Tde notes à valeurs
entières comprises entre 0et 20. Pour ce problème on peut utiliser un tableau supplémentaire NbNotes indicé
de 0 à 20, tel que pour tout indice i NbNotes[i]est le nombre d’éléments de Tégaux à i.
Ecrivez l’algorithme et donnez sa complexité.
7. On veut trier un tableau Tdont les éléments sont des entiers de kchiffres. T[j][l]désigne le l`eme chiffre du j`eme
nombre. Le principe du Tri Par Base est de maintenir l’invariant suivant :
”Après la i`eme itération les éléments de Tsont triés selon les ichiffres de poids faible”
A la fin de la k`eme itération, le tableau est donc trié.
Pour maintenir l’invariant on utilise un tableau Fde 10 files, une file par chiffre : F[j](0 ≤j≤9) est la file
correspondant au chiffre j.
Le traitement effectué à la i`eme itération est :
– prendre les éléments dans l’ordre de Tet les insérer dans la file correspondant à leur i`eme chiffre.
– le nouveau tableau Test obtenu en prenant tous les éléments de F[0], puis de F[1], . . ., puis de F[9].
Ecrivez l’algorithme en utilisant les opérations sur les files :
fileVide?(P),créerFile,têteFile(F),ajouterFile(F,e),retirerFile(F).
Analysez votre algorithme.
Comment adapter l’algorithme précédent pour trier un tableau de mots construits sur l’alphabet {a, . . . , z}
selon l’ordre lexicographique.