Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Algorithmes de Tri

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 13

Algorithmes de tri

El Bachir Toutaoui

CPGE Lycée MOHAMMED V Casablanca


MP
toutaouielbachir@gmail.com

2024/2025
Introduction

Un algorithme de tri est, en informatique ou en mathématiques, un


algorithme qui permet d’organiser une collection d’objets selon une
relation d’ordre déterminée. Les objets à trier sont des éléments
d’un ensemble muni d’un ordre total. Il est par exemple fréquent
de trier des entiers selon la relation d’ordre usuelle ≪ est inférieur
ou égal à ≫.

Ce chapitre a pour objectif d’explorer de nouveaux algorithmes de


tri et de les comparer avec ceux étudiés en première année, en
termes de complexité temporelle.

2 / 13
Tri à bulles
Dans le tri à bulles, on parcourt les éléments de l’ensemble de i=0
à i=n-1, en échangeant les éléments consécutifs s’ils ne sont pas
dans le bon ordre. À la fin de chaque passage, l’élément le plus
grand ”remonte”à la dernière position, ce qui le place
correctement. Ensuite, on répète ce processus en réduisant
l’intervalle, c’est-à-dire de i=0 à i=n-2, puis de i=0 à i=n-3, et
ainsi de suite, jusqu’à ce que tous les éléments soient triés. Ce
déplacement des éléments les plus grands vers la droite rappelle le
mouvement des bulles qui remontent à la surface.

3 / 13
Complexité temporelle du tri à bulles

▶ Meilleur cas (liste déjà triée) : O(n)


Chaque élément est comparé, mais aucun échange n’est
nécessaire.

▶ Pire cas (liste triée à l’envers) : O(n2 )


Pour chaque élément, il faut parcourir la liste restante pour le
placer à la bonne position.

4 / 13
Tri fusion
Principe

▶ Diviser :
Si la liste contient plus d’un élément, elle est divisée en deux
moitiés de taille à peu près égale.
▶ Régner :
Chaque moitié est triée récursivement en appliquant le tri
fusion. Cela continue jusqu’à ce que les sous-listes aient une
taille de 1 (une liste à un seul élément est triée).
▶ Fusionner :
Une fois les sous-listes triées, elles sont fusionnées en une
seule liste triée en comparant les éléments un à un, en prenant
toujours le plus petit élément parmi les deux listes à chaque
étape.

5 / 13
Tri fusion
Illustration

Étapes du tri fusion :


▶ Liste initiale :
[8, 3, 7, 4, 6, 2, 5, 1]
▶ Diviser :
[8, 3, 7, 4, 6, 2, 5, 1] → [8, 3, 7, 4] et [6, 2,
5, 1]
▶ Encore diviser :
[8, 3, 7, 4] → [8, 3] et [7, 4]
[6, 2, 5, 1] → [6, 2] et [5, 1]
▶ Diviser jusqu’à un seul élément :
[8, 3] → [8] et [3]
[7, 4] → [7] et [4]
[6, 2] → [6] et [2]
[5, 1] → [5] et [1]
6 / 13
Tri fusion
Illustration

▶ Fusionner les sous-listes triées :


[8] et [3] ⇒ [3, 8]
[7] et [4] ⇒ [4, 7]
[6] et [2] ⇒ [2, 6]
[5] et [1] ⇒ [1, 5]
▶ Fusionner à nouveau :
[3, 8] et [4, 7] ⇒ [3, 4, 7, 8]
[2, 6] et [1, 5] ⇒ [1, 2, 5, 6]
▶ Fusion finale :
[3, 4, 7, 8] et [1, 2, 5, 6] ⇒ [1, 2, 3, 4, 5, 6,
7, 8]

7 / 13
Complexité temporelle du tri fusion

▶ Pire cas :
Le tri fusion divise toujours la liste en deux sous-listes
d’environ la même taille. Comme il faut diviser la liste log2 (n)
fois, Le temps pour fusioner deux listes triées est linéaire, soit
O(n). la complexité temporelle est donc :

O(n log n)

▶ Meilleur cas :
Même si la liste est déjà triée, le tri fusion doit tout de même
effectuer toutes les étapes de division et de fusion, donc la
complexité reste :

O(n log n)

8 / 13
Tri rapide
Principe

▶ Choisir un pivot :
Un élément de la liste est choisi comme pivot. Ce choix peut
être fait de plusieurs manières (par exemple, le dernier
élément, un élément aléatoire, etc.).
▶ Diviser :
La liste est réorganisée en deux sous-listes : l’une contenant
les éléments plus petits que le pivot, et l’autre contenant les
éléments plus grands.
▶ Récursivité :
Chaque sous-liste est triée récursivement en appliquant le
même processus (choisir un pivot, diviser, etc.).
▶ Fusionner :
Les sous-listes triées sont ensuite fusionnées avec le pivot pour
former une seule liste triée.
9 / 13
Tri rapide
Illustration

Étapes du tri rapide :


▶ Liste initiale :
[8, 3, 7, 4, 6, 2, 5, 1]
▶ Choisir un pivot :
Pivot choisi = 1 (dernier élément)
▶ Diviser :
Tous les éléments plus grands que 1 vont à droite :
[] et [8, 3, 7, 4, 6, 2, 5].
▶ Encore diviser :
Choisir le dernier élément de la sous-liste 5 comme nouveau
pivot :
[3, 4, 2] et [8, 7, 6].

10 / 13
Tri rapide
Illustration

▶ Nouvelle division :
Pivot choisi = 2 pour la sous-liste [3, 4, 2] :
[] et [3, 4].
Pivot choisi = 6 pour la sous-liste [8, 7, 6] :
[] et [8, 7].
▶ Encore diviser :
La sous-liste [3, 4] est divisée avec le pivot 4 :
[3] et [4].
La sous-liste [8, 7] est divisée avec le pivot 7 :
[7] et [8].

11 / 13
Tri rapide
Illustration

▶ Fusion finale :
Fusionner toutes les sous-listes triées avec leurs pivots
respectifs pour obtenir la liste finale triée :
[1, 2, 3, 4, 5, 6, 7, 8]

12 / 13
Complexité temporelle du tri rapide

▶ Cas moyen et meilleur cas :


Dans les meilleurs cas, la liste est divisée en deux parties de
taille égale à chaque étape. Le nombre de divisions est log2 (n)
et chaque division prend un temps O(n). La complexité
temporelle est donc :

O(n log n)
▶ Pire cas :
Si le pivot choisi est toujours le plus petit ou le plus grand
élément, la liste n’est divisée qu’en une seule partie. Cela
conduit à une complexité temporelle de :

O(n2 )

13 / 13

Vous aimerez peut-être aussi