Structures de donn´ees et algorithmes
Projet 1: Algorithmes de tri
Pierre Geurts – Jean-Michel Begon
10 octobre 2014
L’objectif du projet est d’impl´ementer, de comparer et d’analyser empiriquement quatre algo-
rithmes de tri.
1 Enonc´e
Dans beaucoup d’applications r´eelles, les tableaux qu’on a `a trier sont constitu´es de sous-tableaux
d´ej`a tri´es. Il serait donc int´eressant de mettre au point un algorithme de tri tirant parti de cette
propri´et´e. Sur base de cette id´ee, on se propose d’´etudier un nouvel algorithme de tri it´eratif bas´e
sur le principe suivant (en supposant le tableau d´ej`a tri´e par l’algorithme jusqu’`a l’indice i):
(a) On recherche l’indice jmaximal tel que le sous-tableau A[i+ 1 . . j] soit tri´e.
(b) On fusionne A[1 . . i] et A[i+1 . . j] (comme le fait la fonction merge vue au cours th´eorique).
(c) Tant que le tableau n’est pas compl`etement tri´e, on recommence en (b) en prenant i=j.
Exemple: Soit le tableau suivant: [1,5,2,6,4,3,9]. Les ´etapes de fusion seront les suivantes
(la partie verte est fusionn´ee avec la partie rouge pour donner la partie bleue):
•[1,5,2,6,4,3,9] ⇒[1,2,5,6,4,3,9]
•[1,2,5,6,4,3,9] ⇒[1,2,4,5,6,3,9]
•[1,2,4,5,6,3,9]⇒[1,2,3,4,5,6,9]
2 Analyse th´eorique
(a) Enoncez l’invariant associ´e `a la boucle principale de cet algorithme.
(b) Ecrivez en pseudo-code une fonction NewSort impl´ementant l’algorithme d´ecrit ci-dessus.
Vous pouvez supposer que la fonction merge telle que d´efinie au cours th´eorique est connue.
(c) Etudiez sa complexit´e en temps dans le meilleur et dans le pire cas en fonction de la taille
ndu tableau `a trier. Expliquez `a quoi correspondent les meilleur et pire cas et justifiez la
complexit´e que vous obtenez dans ces deux cas.
(d) Est-ce que cet algorithme de tri est stable ? Justifiez bri`evement votre r´eponse.
(e) Quelle est la complexit´e au pire cas de l’algorithme si le tableau de taille nest constitu´e de
k(≤n) blocs pr´e-tri´es de taille identique ? Par exemple, le tableau suivant est constitu´e de
4 blocs pr´etri´es de taille 3:
[5,6,7,1,8,9,2,3,11,12,15,16]
1