SEANCE N° 11
Algorithmes de recherche et de tri
Durée : 3 Heures
Responsable : Adekunlé Akim SALAMI
Parfois, on peut éprouver le besoin de rechercher une information parmi d’autres ou de trier ces
informations en les rangeant dans un certain ordre. Par exemple, si ces informations sont de type
entier, on peut être amené à les ranger dans l’ordre croissant ou dans l’ordre décroissant. Pour
cela, il existe des algorithmes de recherche ou de tri qui peuvent être appliqués aux structures de
données contenant ces informations. Dans ce cours, nous allons présenter quelques uns de ces
algorithmes en donnant leurs principes de fonctionnement.
Cette activité concerne l’étude des algorithmes de tri ou de recherche d’un élément dans un
ensemble. Le résultat d’une recherche est la présence ou l’absence de l’élément recherché.
Rechercher un élément revient à le comparer un à un avec les éléments d’un ensemble.Cette
recherche peut se faire avec une approche séquentielle ou une approche dichotomique Quand
aux algorithmes de tri, il en existe plusieurs exemples dont le tri par par sélection et le tri rapide
Objectifs:
À la fin de cette séance, l’apprenant devrait être capable de :
Contenu :
1. Introduction
2. La recherche séquentielle ;
3. La recherche dichotomique
4. Le tri par sélection ;
5. Le tri rapide ;
AVRIL 2020
COMMISSION LMD-UL
6. Tests de connaissances acquises au cours de la séance.
Activités :
L’apprenant prendra le soin de lire le texte de chaque activité (objet des activités N°1 au N°3)
dans le but de répondre à des questions qui fera l’objet de l’activité N°4.
Activité N°1 : Introduction
Durée : 25 minutes
Le résultat d’une recherche est la présence ou l’absence de l’élément recherché. Rechercher un
élément revient à le comparer un à un avec les éléments d’un ensemble. Cette recherche peut se
faire avec une approche séquentielle ou une approche dichotomique Quand aux algorithmes de
tri, il en existe plusieurs exemples dont le tri par sélection et le tri rapide.
Activité N°2 : La recherche séquentielle
Durée : 25 minutes
Avec la recherche séquentielle, les éléments sont comparés de manière séquentielle en
commençant par le premier et en terminant éventuellemnt par le dernier si l’élément rechercé est
absent ou se trouve à la fin de l’ensemble.
Ce type de recherche fonctionne pour un ensemble ordonné ou pas.
Activité N°3 : La recherche dichotomique
Durée : 25 minutes
La recherche dichotomique fonctionne seulement avec un ensemble ordonné car elle consiste à
diviser récursive ce dernier en deux parties pour trouver l’élément soit au milieu de l’ensemble
ou dans l’une de ses parties selon le principe suivant:
- Si l’élément cherché est trouvé si sa valeur est égale à la valeur de l’élément au milieu
- Sinon si sa valeur est inférieure à la valeur de l’élément au milieu, alors la recherche se
poursuit avec le sous-ensemble avant le milieu.
- Sinon la recherche se poursuit avec le sous-ensemble situé après le milieu.
Activité N°4 : Le tri par sélection
Durée : 25 minutes
Le principe du tri par sélection consiste à déterminer successivement l’élément devant se
retrouver en première position, en deuxième position, etc., c’est à dire le plus petit des éléments
restants, et ainsi de suite.
Pour cela, on parcourt le tableau de gauche à droite et, à chaque position i, on place le plus petit
élément qui se trouve dans le sous tableau droit (entre les positions i et N-1).
Spécification abstraite
Nous supposons que les données a1, a2, ... , an sont mises sous forme d'une liste (a1, a2, ... ,
an), la liste (a1, a2, ... , an) est décomposée en deux parties : une partie liste (a1, a2, ... , ak) et
AVRIL 2020
COMMISSION LMD-UL
une partie non-triée (ak+1, ak+2, ... , an); l'élément ak+1 est appelé élément frontière (c'est le
premier élément non trié).
Le principe est de parcourir la partie non-triée de la liste (ak+1, ak+2, ... , an) en cherchant
l'élément minimum, puis en l'échangeant avec l'élément frontière ak+1, puis à déplacer la
frontière d'une position. Il s'agit d'une récurrence sur les minima successifs. On suppose que
l'ordre s'écrit de gauche à droite (à gauche le plus petit élément, à droite le plus grand
élément).
On recommence l'opération avec la nouvelle sous-suite (ak+2, ... , an) , et ainsi de suite
jusqu'à ce que la dernière soit vide.
Spécification concrète
La suite (a1, a2, ... , an) est rangée dans un tableau à une dimensionT[...] en mémoire centrale.
Le tableau contient une partie triée (en foncé à gauche) et une partie non triée (en blanc à
droite).
et l'on obtient ainsi à la fin de l'examen de la sous-liste (ak+1, ak+2, ... , an) la valeur min (ak+1,
ak+2, ... , an) stockée dans la cellule ak+1.
AVRIL 2020
COMMISSION LMD-UL
Et l'on recommence la boucle de recherche du minimum sur la nouvelle sous-liste (ak+2, ak+3,
... , an) etc...
Tant que la partie non triée n'est pas vide, on range le minimum de la partie non-triée dans
l’élément frontière.
Algorithme Tri_Selection
local: m, i , j , n, temp : Entiers naturels
Entrée : Tab : Tableau d'Entiers naturels de 1 à n éléments
Sortie : Tab : Tableau d'Entiers naturels de 1 à n éléments début
pour i de 1 jusquà n-1 faire // recommence une sous-suite
m = i ; // i est l'indice de l'élément frontière ai = Tab[ i ] pour j de i+1 jusquà n
faire// (ai+1 , ai+2 , ... , an )
si Tab[ j ] < Tab[ m ] alors // aj est le nouveau minimum partiel
m = j ; // indice mémorisé
Fsi fpour;
temp = Tab[ m ] ;
Tab[ m ] =Tab[ i ] ;
Tab[ i ] = temp //on échange les positions de ai et de aj fpour
Fin Tri_Selection
Complexité
Choix d’opération : Comparaison de 2 cellules.
Le nombre de comparaisons "si Tab[ j ] < Tab[ m ] alors" est une valeur qui ne dépend que
de la longueur n de la liste (n est le nombre d'éléments du tableau), ce nombre est égal au
nombre de fois que les itérations s'exécutent, le comptage montre que la boucle "pour i de 1
jusquà n-1 faire" s'exécute n-1 fois (donc une somme de n-1 termes) et qu'à chaque fois la
boucle "pour j de i+1 jusquà n faire" exécute (n-(i+1)+1 fois la comparaison "si Tab[ j ] <
Tab[ m ] alors".
La complexité en nombre de comparaison est égale à la somme des n-1 termes suivants (i = 1,
...i = n-1)
C = (n-2)+1 + (n-3)+1 +.....+1+0 = (n-1)+(n-2)+...+1 = n.(n-1)/2 (c'est la somme des n-1
premiers entiers).
AVRIL 2020
COMMISSION LMD-UL
Durée : 25 minutes
Le principe du tri rapide est basé sur le modèle “diviser pour régner”. Pour trier un tableau tab
d’indice de début deb et d’indice de fin fin, le principe est le suivant :
- Diviser: On choisit arbitrairement un élément du tableau que l’on appellera pivot. On
partitionne le tableau en deux sous-tableaux en le réarrangeant de telle façon que tous les
éléments inférieurs ou égaux au pivot soient placés avant lui, et que tous les éléments strictement
supérieurs au pivot soient placés après lui.
- Régner: Le pivot étant à sa place définitive, il reste à trier (de la même façon) les deux
soustableaux placés avant et après lui.
- Combiner: Les sous-tableaux étant triés sur place, on peut alors affirmer que le tableau est
trié en totalité.
Activité N°6 : Tests de connaissances acquises au cours de la séance
Durée : 2 Heures
Cette activité consiste à vérifier si cette séance est bien assimilée par l’apprenant.
Les réponses aux questions doivent être envoyées dans les 24H à l’adresse asalami@univ-lome.tg
Il est demandé à l’apprenant pour une durée totale de deux (02) Heures.
de répondre aux questions suivantes:
1. Donnez une brève description de l’algorithme de recherche dichotomique. (2pts)
2. Quelle est la différence entre la recherche séquentielle et la recherche dichotomique?
(2pts)
3. Donnez une brève description de l’algorithme de tri par sélection ; (2pts)
4. Donnez une description de l’algorithme de tri par insertion ; (4pts)
5. Implémenter en langage C l’algorithme de tri par insertion. (10pts)
AVRIL 2020