Vous êtes sur la page 1sur 11

Les algorithmes de tri et de recherche

I. Introduction

Le traitement des donnes pose le problme de leur classement (tri). C'est pour cela que diffrentes
mthodes de tris ont t dveloppes.
Un algorithme de tri sert donner un ensemble d'lments. Il facilite l'accs l'information et la recherche
d'un lment dans une quantit trs grande d'information.
Vu l'importance de l'opration de tri, plusieurs algorithmes performants ont t proposs. Les diffrents
algorithmes prsentent des performances diffrentes, en terme de temps d'excution et en terme d'espace
mmoire requis pour leur excution.
Une utilisation courante de l'informatique est la recherche parmi des donnes prsentant des
caractristiques communes, d'lments satisfaisant certains critres. En gnral, le critre de recherche
porte sur la valeur d'une cl. Par exemple, chercher le numro de tlphone (tel) d'une personne dans un
ensemble de personnes (une personne = nom + adresse + tel).
Nous allons voir dans ce chapitre les principaux algorithmes de tri et de recherche de donnes

II. Les algorithmes de tri

A. Tri par change


Le tri par change est un algorithme de tri peu performant cause de sa lenteur d'excution. C'est
pourtant l'un des plus tudis car c'est l'un des plus simples comprendre.
Le principe de cet algorithme consiste prendre chaque lment d'un tableau et le comparer tous ses
suivants, lorsque l'ordre n'est pas respect les deux lments sont permuts.
Algorithme de tri par change
Algorithme Tri_echange
Variables i, j, N, echange : entier
T : Tableau [1..N] d'entiers
Dbut
Pour i Allant de 1 N-1 Faire
Pour j Allant de i+1 N Faire
Si T[i] > T[j] Alors
echange T[i]
T[i] T[j]
T[j] echange
FinSi
FinPour
FinPour
Fin
INFO4YOU - Training | Info4you2013@gmail.com - http://info4you13.blogspot.com/
Page |1

Description
Le tableau suivant montre le fonctionnement de cet algorithme

INFO4YOU - Training | Info4you2013@gmail.com - http://info4you13.blogspot.com/


Page |2

La premire ligne indique la position initiale des lments du tableau avant le dmarrage de l'algorithme.
Dans la premire ligne de la premire itration, l'algorithme compare le premier lment du tableau T
(nombre 7) avec le deuxime (nombre 4). Les lments compars sont nots en gris. Dans ce cas, un
change est effectu entre ces deux lments. On procde de la mme faon (c'est dire le premier
lment avec les autres) jusqu' la fin de la premire itration.
Lorsque l'on termine de parcourir le tableau la premire fois (premire boucle), on est sr d'avoir plac le
premier lment la bonne place. On parcourt donc de nouveau le tableau pour placer le second lment,
le troisime jusqu'au dernier.

B. Tri Bulle (Bubble Sort)


Le principe de l'algorithme tri Bulle (Bubble Sort) consiste comparer successivement les lments
adjacents, et les permuter si le premier lment est suprieur au second. L'opration est relance jusqu' ce
qu'il n'y a plus de permutation possible (tous les nombres sont tris).
Algorithme de tri bulle
Algorithme Tri_Bulle
Variables i, N, echange : entier
permut : boolen
T : Tableau|N] d'entiers
Dbut
Rpeter
permut faux
Pour i Allant de 1 N-1 Faire
Si T[i] > T[i+1] alors
//Permuter les deux lments
echange T[i]
T[i] T[i+1]
T[i+1] echange
permut vrai
FinSi
FinPour
Jusqu' permut = faux
Fin
Description
L'algorithme contient deux boucles imbriques. La boucle interne (la boucle Pour) permet de comparer
les lments adjacents du tableau puis les changer s'ils sont dsordonns. La boucle externe, quant elle,
entrane la boucle interne se rpter jusqu' ce qu'il n'a plus aucune permutation effectuer (variable
permut = Faux ). Les lments les plus grands remontent ainsi, peu peu vers les dernires places, ce qui
explique la dnomination de tri bulle.

INFO4YOU - Training | Info4you2013@gmail.com - http://info4you13.blogspot.com/


Page |3

Le tableau suivant montre le fonctionnement de cet algorithme.

La premire ligne indique la position initiale des lments du tableau T avant le dmarrage de l'algorithme.
Chaque ligne indique le contenu du tableau T aprs chaque itration de la boucle.
Algorithme de tri bulle amloir
Algorithme Tri_bull_amloir
Variables i, x, N, echange : entier
Permut : boolen
T : Tableau[N] d'entiers
Dbut
x N
Rpter
x x-1
permut faux
Pour i Allant de 1 x faire
Si T[i] > T[i+1] Alors
//Permuter les deux lments
echange T[i]
T[i] T[i+1]
T[i+1] echange
permut vrai
x i
INFO4YOU - Training | Info4you2013@gmail.com - http://info4you13.blogspot.com/
Page |4

FinSi
FinPour
Jusqu' permut = faux
Fin
Cet algorithme consiste rduire chaque fois l'intervalle de tri. C'est dire qu'au dbut on parcourt tout
le tableau, on dplace l'lment le plus grand vers la droite. Aprs le premier passage, le plus grand lment
est assur d'tre la fin du tableau, aprs le second passage, le deuxime plus grand lment est en
position, et ainsi de suite. C'est pourquoi la limite suprieure dans la boucle interne doit tre diminue avec
chaque passage.
Remarque :
Le principe du tri bulles bidirectionnel est de parcourir la liste trier dans un sens puis dans l'autre donc
en alternant le sens de passage chaque tour. Cette technique augmente lgrement la rapidit de
l'algorithme.

C. Tri par insertion


Le tri par insertion est l'un des plus naturels : c'est le tri qu'on utilise intuitivement lorsqu'on souhaite trier
une liste d'objets manuellement, par exemple des dossiers, des cartes jouer etc. On prend un dossier et
on le met sa place parmi les dossiers dj tris. Puis on recommence avec le dossier suivant.
Le principe de cet algorithme est de considrer que le tableau est divis en deux parties de tailles variables;
une dans laquelle les donnes sont tries et l'autre contenant les donnes trier. Au dbut de l'algorithme
la partie non trie contient les autres lments (le reste du tableau).
On prend un un les lments de la partie non trie du tableau et on l'insre au bon endroit dans la partie
trie du tableau en dplaant tous les lments qui le prcde. Ds que l'lment insrer est plus grand
qu'un des lments de la partie trie du tableau, il n'y a plus de dplacement, et l'lment est insr dans la
case laiss vacante par les lments qui ont t dplac.
Algorithme de tri par insertion
Algorithme Tri_insertion
Variables i, j, N, echange : entier
T : Tableau[N] de entiers
Dbut
Pour i Allant de 2 N faire
echange T[i]
j i - 1
TantQue (j >= 1 et echange < T[j]) Faire
T[j + 1] T[j]
j j -1
FinTantQue
T[j+1] echange
FinPour
Fin

INFO4YOU - Training | Info4you2013@gmail.com - http://info4you13.blogspot.com/


Page |5

Description
Le tableau suivant montre le fonctionnement de cet algorithme.

Chaque ligne indique le contenu du tableau T aprs chaque itration de la boucle Pour, et la valeur
conserve par la variable echange .
La premire ligne indique la position initiale des lments du tableau T avant le dmarrage de l'algorithme.
La partie trie (note en gris) contient une case, les cases restants ne sont pas tries (partie non trie).
Dans la premire itration (i = 2), le nombre 4 a t insr au dbut du tableau. Cela ncessite le
dplacement du nombre qui le prcde (7). On procde de la mme faon jusqu' la fin du tableau.
Cet algorithme est utile lorsque l'ensemble des lments n'est pas disponible immdiatement. Imaginons
par exemple une application interactive o l'utilisateur fournit un lment la fois et doit maintenir un
ensemble tri de ces lments.

D. Tri rapide
Le tri rapide (en anglais QuickSort) est une mthode de tri invente par C. Hoare base sur la mthode
conception "diviser pour rgner". Il n'est pas le plus rapide dans tous les cas, mais il a la particularit d'tre
relativement rapide dans la plupart des situations.
Le principe de cet algorithme consiste choisir un lment T[i] du tableau, appel Pivot qui va servir
partitionner ce tableau en deux parties. Toutes les valeurs d'une partie seront infrieurs eu Pivot, les autres
suprieurs. Ensuite, de faon rcursive , l'algorithme va recommencer le tri dans les deux sous tableaux
ainsi obtenus.
Le schma suivant illustre le principe du tri rapide. Nous choisissons ici comme Pivot l'lment du tableau
dont l'indice est le plus petit.

INFO4YOU - Training | Info4you2013@gmail.com - http://info4you13.blogspot.com/


Page |6

Algorithme de tri rapide


Algorithme TriRapide
Variables T : Tableau [N] de entiers
//Fonction Partition (voir la description ci-dessous)
Fonction Partition (T : tableau d'entiers, D: entier, F : entier) :
entier
Variables Inf, Sup, Pivot, echange : entier
Dbut
Inf D + 1
Sup F
Pivot T[D]
TantQue Inf <= Sup Faire
//parcourt le tableau de gauche droite jusqu'
rencontrer
//un lment suprieur au pivot
TantQue T[Inf] <= Pivot et Inf <= F Faire
Inf Inf + 1
FinTantQue
//parcourt le tableau de droite gauche jusqu'
rencontrer
//un lment infrieur au pivot
TantQue T[Sup] > Pivot et Sup > D Faire
Sup Sup - 1
FinTantQue
// Permuter ces deux lments
Si Inf < Sup Alors
echange T[Inf]
T[Inf] T[Sup]
T[Sup] echange
Inf Inf + 1
Sup Sup -1
FinSi
FinTantQue
echange T[D]
T[D] T[Sup]
T[Sup] echange
retourne (Sup)
FinFonction
//Procdure Tri
Procdure Tri(T : tableau d'entiers, D : entier, F : entier)
Variable Pos : entier
INFO4YOU - Training | Info4you2013@gmail.com - http://info4you13.blogspot.com/
Page |7

Dbut
Si D < F Alors
Pos Partition(T, D, F)
//trie le sous tableau gauche
Tri(T, D, Pos - 1)
//Trie le sous tableau droite
Tri(T, Pos + 1, F)
FinSi
FinProc
//Algorithme principal (partie principale)
Dbut
//Appel de la procdure
Tri(T, 1, N)
Fin
Description
L'algorithme ci-dessus contient une fonction et une procdure qui prend en entre un tableau d'entiers et
deux entiers qui sont des bornes entre lesquelles il faut trier les valeurs. L'excution de cet algorithme
commence par l'excution de l'algorithme principal qui fait appelle la procdure Tri . La fonction
Partition sert partitionner le tableau en deux parties et mettre le Pivot sa place dfinitif. Elle
retourne en rsultat la position finale du Pivot. Le tableau ci-dessous montre une tape de
partitionnement du tableau.

Chaque ligne reprsente une itration de la boucle TantQue du partitionnement du tableau. Dans cette
boucle les indices inf et sup sont respectivement incrments et dcrments tant qu'ils sont infrieurs
(suprieurs) au Pivot. Ensuite la boucle effectue un change entre deux lments du tableau. Les cellules
en gris reprsentent le Pivot et les valeurs en gras sont celles qui vont tre permutes.
La procdure Tri est constitue de l'appel la fonction Partition et de l'appel rcursif la procdure de tri
dans les deux portions du tableau.

INFO4YOU - Training | Info4you2013@gmail.com - http://info4you13.blogspot.com/


Page |8

Le tableau ci-dessous illustre le fonctionnement de cet algorithme.

III.

Les algorithmes de recherche

A. Recherche squentielle
Le principe de l'algorithme de recherche squentielle consiste parcourir un tableau d'lments dans
l'ordre de ses indices jusqu' ce qu'un lment recherch soit trouv ou bien que la fin du tableau soit
atteinte et le rang (indice) de l'lment est alors retourn.
Algorithme de recherche squentielle.
Fonction RechSq(T : Tableau d'entiers, N : entier, ValRech :
entier) : entier
Variable i : entier
Dbut
Pour i Allant de 1 N Faire
Si T[i] = ValRech Alors
Retourner i
FinSi
FinPour
Retourner -1
FinFonction
Description
L'algorithme ci-dessus est une fonction qui prend en entre, un tableau T d'entiers non tris de N
lments et un entier ValRech qui est la valeur recherch.
La boucle Pour consiste parcourir le tableau en comparant la valeur recherche avec chaque lment du
tableau.
INFO4YOU - Training | Info4you2013@gmail.com - http://info4you13.blogspot.com/
Page |9

Si la valeur est trouve, l'instruction Retourner i interrompt la fonction. Dans ce cas la fonction renvoie la
valeur de i , c'est dire l'indice de l'lment recherch.
Lorsque la valeur recherche n'est pas trouve dans le tableau, la fonction renvoie -1.

B. Recherche dichotomique
L'algorithme de recherche dichotomique est un algorithme efficace et rapide pour la recherche d'un
lment dans un tableau tri.
Le principe de cet algorithme consiste diviser le tableau en deux parties et comparer la valeur
recherche avec l'lment situ au milieu du tableau (l'lment mdian).
Si la valeur recherche correspond l'lment mdian, alors l'algorithme s'arrte et renvoie l'indice de cet
lment. Sinon l'algorithme va rpter la recherche uniquement dans la partie qui peut contenir la valeur
recherche.
Algorithme de recherche dichotomique
Fonction RechDich( T: tableau d'entiers, N : entier, ValRech :
entier) : entier
Variables D, F, M : entier
D 1
F N
Dbut
TantQue D <= F Faire
//Ent : c'est la fonction partie entire
M Ent ((D + F) / 2)
Si T[M] = ValRech Alors
Retourner M
Sinon
Si T[M] < ValRech Alors
D M + 1
Si T[D] = ValRech Alors
Retourner D
FinSi
Sinon
F M - 1
Si T[F] = ValRech Alors
Retourner F
FinSi
FinSi
FinSi
FinTantQue
Retourner -1
FinFonction
Description :
L'algorithme ci-dessus est une fonction qui prend en entre, un tableau T d'entiers tri, la taille de ce
tableau N et un entier ValRech qui est la valeur recherche.

INFO4YOU - Training | Info4you2013@gmail.com - http://info4you13.blogspot.com/


P a g e | 10

Les variables D et F correspondent aux indices respectivement dbut et fin de l'intervalle de recherche
dans le tableau. M c'est l'indice mdian de l'intervalle de recherche.
Le tableau ci-dessous montre le fonctionnement de cet algorithme. La valeur recherche est 35.

Chaque ligne indique l'intervalle de recherche dans le tableau chaque itration de la boucle TantQue . La
cellule grise reprsente l'lment mdian de l'intervalle de recherche.
La premire ligne indique la position initiale avant le dmarrage de l'algorithme. Dans la ligne suivante,
l'algorithme compare le nombre 15 qu'est l'lment mdian la valeur 35 (15 < 35). Dans ce cas
l'algorithme continue la recherche entre les indices M +1 et F.
Lors de l'itration suivante la valeur recherche a t trouve, la fonction s'interrompt et renvoie l'indice de
cet lment.
Cette fonction dispose de quatre sorties possibles : trois l'intrieur de la boucle, si la valeur est trouve et
une la fin si elle n'est pas trouve. Par convention la valeur -1 est retourne si la valeur n'est pas trouve.
Remarque :
Pour utiliser la recherche dichotomique, il faut tout d'abord trier le tableau en utilisant l'un des algorithmes
de tri.

Pour vous envoyer ce cours sur votre boite

INFO4YOU - Training | Info4you2013@gmail.com - http://info4you13.blogspot.com/


P a g e | 11