Vous êtes sur la page 1sur 4

TD n°8 Alg orithmes d e

t ris
ISN_tri_python

1 LE TRI PAR INSERTION


1.1 PROBLEMATIQUE

Comment ranger des données afin de faciliter leur accès futur ?


C’est par exemple l’ordre alphabétique du dictionnaire, où les mots sont rangés dans un ordre logique
qui permet de ne pas devoir parcourir tout l’ouvrage pour retrouver une définition. Ce peut être aussi
l’ordre intuitif dans lequel un joueur de cartes va ranger son jeu afin de limiter le temps de recherche
pendant le déroulement de la partie.
Le tri permet essentiellement d’accélérer les recherches, grâce à l’algorithme de recherche
dichotomique.

1.2 PRINCIPE DU TRI PAR INSERTION

L'algorithme principal du tri par insertion est un algorithme qui insère un élément dans une liste
d'éléments déjà triés (par exemple, par ordre croissant).

Imaginez un joueur de cartes qui dispose de cartes numérotées. Il a des cartes triées de la plus petite à
la plus grande dans sa main gauche, et une carte dans la main droite. Où placer cette carte dans la
main gauche de façon à ce qu'elle reste triée ? Il faut la placer après les cartes plus petites, et avant les
cartes plus grandes.

Par exemple, si la main gauche est (1 3 6 8), et que j'ai la carte 5 dans la main droite, il faut la placer
après (1 3) et avant (6 8). Si l'on fait ça, on se retrouve avec la main gauche (1 3 5 6 8), qui est encore
triée.
1.3 INSERER UN ELEMENT DANS LA MAIN GAUCHE

Commençons tout d’abord par l’opération d’insertion d’une carte de la main droite vers la main
gauche. On veut placer la carte après toutes les cartes plus petites, et avant toutes les cartes plus
grandes.

En reprenant notre exemple de tout à l'heure, pour insérer l'élément 5 dans la main (1 3 6 8), voici ce
qu'on veut faire :

ISN| Y. PAILLOT | Lycée Louis Massinon – Abu Dhabi 1


Pour faire cela avec un tableau, on a du décaler certaines cartes : 6 était en position 2 avant l'insertion,
elle est en position 3 après. De même, la carte 8 a été décalée. Plus généralement, il faut décaler d’une
case vers la droite toutes les cartes plus grandes que la carte à insérer.

Pour faire cela, une bonne méthode est de commencer par la droite : on décale la carte la plus à droite
(8), puis celle juste à gauche (6), jusqu'au moment où on tombe sur une carte plus petite que celle
qu'on veut insérer, qu'il ne faut pas décaler. Une fois qu'on a fait ces décalages, on peut insérer la
carte, à la position à laquelle on s'est arrêté de décaler.

Pour trier entièrement un ensemble de cartes dans le désordre, il suffit alors de placer toutes ses
cartes dans la main droite (la main gauche est donc vide), et d'insérer les cartes une à une dans la main
gauche, en suivant la procédure ci-dessus.

1.4 IMPLEMENTATION AVEC 2 LISTES.

Pour coder cet algorithme, Je prends 2 listes. Le premier étant ma liste « listd » en désordre (la main
droite dans mon exemple) le second « listg » vide au départ.
Admettons que je sois à l’étape « i » de mon tri. Je dois donc insérer la case listd[i] dans le tableau listg
qui contient déjà les i-1 premiers éléments de tabd trié.
Comment coder cela en Python ? Indication, on a une methode list.insert (position,élément) qui insert
l’ « élément » dans la list à la « position ».

Il ne reste plus qu’a faire une boucle for avec i in range (la longueur de ma liste) et insérer chaque
élément listd[i] dans la listg. On pourrait faire, pour plus de clarté, une première fonction qui prend en
argument un nombre et une liste (supposée triée) et insert ce nombre à la bonne place dans la liste.

2 LE TRI PAR SELECTION

2.1 PRINCIPE DU TRI PAR SELECTION

Le principe est de rechercher la valeur maximale dans un tableau de taille n et de l'échanger


avec le dernier élément du tableau. Il faut ensuite faire la même chose avec les n-1 premiers
termes du tableau puis les n-2 termes, etc... Jusqu’à ce qu'il ne reste plus qu'une seule valeur.

ISN| Y. PAILLOT | Lycée Louis Massinon – Abu Dhabi 2


Exemple : Les différentes étapes de l’algorithme pour le tableau {7 ; 3 ; 0 ; 1 ; 9 ; 6}

pour swaper :
l[4],l[5] = l[5],l[4]

2.2 IMPLEMENTATION AVEC 1 LISTE.

Faire une première fonction indice_max qui prend en argument une liste et un entier n et qui renvoi la
position du plus grand élément de cette liste dans les n premiers termes (attention, pas la valeur de
l’élément mais bien sa position).

Une fois ceci fait, on fait une boucle for « à rebour » avec i allant de la longueur de la liste jusqu'à 1,
On chercher l’indice max dans la liste des i premiers élément avec notre fonction et on échange les deux
éléments en position i et indice_max. Les échanges dans la liste peuvent être fait avec une double
affectation simultanée en python de type a,b=b,a qui a le mérite de ne pas utiliser de « variable de
sauvegarde »

3 LE TRI PAR BULLES.

3.1 PRINCIPE DU TRI PAR BULLES

L'algorithme parcourt le tableau, et compare les couples d'éléments successifs. Lorsque deux éléments
successifs ne sont pas dans l'ordre croissant, ils sont échangés. Après chaque parcours complet du
tableau, l'algorithme recommence l'opération. Lorsqu'aucun échange n'a lieu pendant un parcours,
cela signifie que le tableau est trié. On arrête alors l'algorithme.

3.2 EXEMPLE ETAPE PAR ETAPE

Prenons la liste de chiffres « 5 1 4 2 8 » et trions-la de manière croissante en utilisant l'algorithme de tri


à bulles. Pour chaque étape, les éléments comparés sont écrits en gras.

Première étape:
(51428) ( 1 5 4 2 8 ) Les éléments 5 et 1 sont comparés, et comme 5 > 1, l'algorithme les
intervertit.
(15428) ( 1 4 5 2 8 ) Interversion car 5 > 4.
(14528) ( 1 4 2 5 8 ) Interversion car 5 > 2.
(14258) ( 1 4 2 5 8 ) Comme 5 < 8, les éléments ne sont pas échangés.

Deuxième étape:
ISN| Y. PAILLOT | Lycée Louis Massinon – Abu Dhabi 3
(14258) ( 1 4 2 5 8 ) Même principe qu'à l'étape 1.
(14258) (12458)
(12458) (12458)

Il n’est pas nécessaire de comparer 5 et 8 ca on est assuré d’avoir après la première étape, le plus
grand nombre au en bout de tableau.
À ce stade, la liste est triée, mais pour le détecter, l'algorithme doit effectuer un dernier parcours.

Troisième étape:
(12458) (12458)
(12458) (12458)
Comme la liste est triée, aucune interversion n'a lieu à cette étape, ce qui provoque l'arrêt de
l'algorithme.

3.3 CODAGE DU TRI PAR BULLE.

Coder le tri par bulle. On pourra au départ coder une version simple qui parcours intégralement le
tableau pour faire l’inversion nécessaire, puis on pourra optimiser en rajoutant un compteur « j » qui
compte le nombre d’étapes effectuée et arrête les comparaisons en s’arrêtant à « j » cases de la fin
(puisqu’on est assuré d’avoir les j plus grands éléments triés en fin de tableau après j étapes).

ISN| Y. PAILLOT | Lycée Louis Massinon – Abu Dhabi 4

Vous aimerez peut-être aussi