Département Mathématiques, Physique & Informatique
Faculté Polydisciplinaire de Taza
Université Sidi Mohamed Ben Abdallah de Fès
Examen d'Algorithmes et Structure de Données
Session normale
Durée: 3 heures
Le 14 Juin 2013
N.B: Dans tous les exercices, on suppose que les données à traiter sont des valeurs entières.
Exercice 1: Tri Shell (6 points)
Le tri de Shell est une amélioration du tri par insertion en observant deux choses :
Le tri par insertion est efficace si la liste est à peu près triée (1)
Le tri par insertion est inefficace en moyenne car il ne déplace les valeurs que d'une position
par instruction (2)
Le tri de Shell trie chaque liste d'éléments séparés de k position (k=N/2 au départ, N nombre total
des éléments du tableau) chacun avec le tri par insertion. L'algorithme effectue plusieurs fois cette
opération sur les éléments séparés de k=k/2 positions jusqu'à ce que k=1 ce qui est équivaut à trier
tous les éléments ensemble.
Le fait de commencer avec des éléments espacés permet de pallier l'inconvénient (2), tandis que
lorsque l'on tri à la fin avec un espacement de 1 (tri par insertion ordinaire), on tire parti de
l'avantage (1).
1.
Rappeler le principe du tri par insertion dans l'ordre croissant puis donner son algorithme
2.
Écrire la fonction tri_Shell() qui permet de trier selon le principe du tri Shell un tableau T
de N valeurs dans l'ordre croissant puis l'exécuter à la main sur le
tableau suivant:
5 6 1 4 0 7 3 2
3. Calculer la complexité du tri Shell dans le pire et le meilleur des cas
Exercice 2: Lises doublement chainées (8 points)
Les listes doublement chainées sont des structures de données pour lesquelles chaque chainon à un
pointeur suivant qui pointe vers le chainon suivant et un pointeur precedent qui pointe vers le
chainon précédent
1. Donner la définition d'une liste doublement chainée
2. Réaliser les fonctions de gestion des listes doublement chainées suivantes:
a. Ajouter_entête() qui ajoute une valeur à la fin d'une liste passé comme paramètre
b. Afficher() qui affiche les valeurs d’une liste passée comme paramètre
* 4 *
* 2 * * 1 * * 0 *