TD 06 - Tris 1
1 Échauffement
1.1 Exercice 1
On considère un tableau \(T\) de \(n\) entiers (éventuellement avec des répétitions).
Écrire l’algorithme de tri sélection.
Tester votre algorithme sur l’exemple suivant : \(T = [2, 7, 5, 2, 7, 8, 5, 9]\)
Écrire l’algorithme de tri à bulles.
Tester votre algorithme sur l’exemple suivant : \(T = [2, 7, 5, 2, 7, 8, 5, 9]\)
Tester votre algorithme sur l’exemple suivant : \(T = [2, 3, 5, 7, 8, 8, 9]\)
Modifier votre algorithme pour que la complexité minimale soit en \(\Theta(n)\).
Principe : Chercher le minimum de la partie non triée et le placer en première position de cette partie.
Complexité : \(\Theta(n^2)\) dans tous les cas (meilleur, moyen, pire).
Stabilité : Non stable (peut modifier l’ordre relatif d’éléments égaux).
Principe : Parcourir le tableau et échanger les éléments adjacents mal ordonnés.
Complexité : - Meilleur cas : \(\Theta(n)\) si tableau déjà trié (avec optimisation) - Pire cas : \(\Theta(n^2)\) si tableau trié en ordre inverse
Stabilité : Stable (conserve l’ordre relatif d’éléments égaux).
2 Au travail
2.1 Exercice 2 : Tri distance
On considère un tableau d’entiers T de taille n et un entier x. La distance d’un élément du tableau avec x est simplement la valeur absolue de la différence entre x et l’élément en question.
Exemple :
T = [3, 1, 5, 9, 4], x = 7
distance entre T[1] et x: |7 - 3| = 4
distance entre T[2] et x: |7 - 1| = 6
etc
Écrire un algorithme
MaxDistance(T,i,x)qui retourne l’indice de l’élément deTqui maximise la distance avecxparmi les éléments compris entre l’indice \(i\) et l’indice \(n\). Par exemple, avec les données précédentesMaxDistance(T,1,x)retournera 2 etMaxDistance(T,3,x)retournera 5.Écrire un algorithme de tri
TriDistance(T,x)qui trie les éléments du tableau en fonction de leur distance à l’entierx, du plus éloigné au plus proche.
2.2 Exercice 3 : Tri cocktail
Le tri cocktail est une amélioration du tri à bulles visant à réduire le coût du pire cas en mélangeant les versions gauche-droite et droite-gauche. La complexité asymptotique n’est par contre pas modifiée.
Rappeler quel est le pire cas du tri à bulles. Quel est le pire cas de la version de droite à gauche ?
Proposer un algorithme de tri basé sur le tri à bulles alternant les parcours de droite à gauche puis de gauche à droite.
Améliorer l’algorithme en tenant compte du dernier indice où une permutation a eu lieu.
Le tri cocktail (ou tri shaker) alterne les parcours : - Phase 1 : Du début vers la fin (fait remonter le max) - Phase 2 : De la fin vers le début (fait descendre le min)
Cela permet de traiter plus rapidement certains cas pathologiques du tri à bulles.
2.3 Exercice 4 : Tri en vague 🏠
Un tableau est dit trié en vague si chaque élément - hors éléments de début et de fin - est soit supérieur soit inférieur à ses deux voisins. Par exemple, le tableau [2,1,5,2,4,3] est trié en vague.
Proposer un algorithme qui convertit un tableau trié en tableau trié en vague.
Écrire un algorithme qui trie en vague un tableau quelconque. Est-il plus efficace de trier dans l’ordre un tableau quelconque puis de le trier en vague ou de le trier en vague directement ?
[2,1,5,2,4,3]: 1 < 2 et 1 < 5 ✓, 5 > 1 et 5 > 2 ✓, 2 < 5 et 2 < 4 ✓[2,4,1,3,0]: alternance pic/creux