PSD 1ère MI 2015/2016 Chapitre 2 Les algorithmes de tri et de recherche
19
I. Introduction
Parmi les plus grands avantages de l’ordinateur c’est qu’il permet de stocker de grandes
quantités d’informations (en MC et en MS).
On a souvent besoins de chercher certaines informations pour une consultation ou une
mise à jour ;
Cette recherche doit être rapide les informations doivent être ordonnées nécessité
d’ordonner les informations en MC ou MS avant la recherche notion de tri.
II. Tri d’un tableau
Soit un tableau de N éléments, on veut chercher une valeur Val dans ce tableau ;
Trouve faux
I 1 ;
TQ (I<=N) et (non trouve) faire
Si val = T[I] alors
Trouve vrai ;
Indice I ;
Finsi
I=i+1 ;
finTQ
On est obligé de parcourir le tableau élément par élément jusqu’à trouver ou arriver à la
fin, c’est comme si on cherche un mot dans un dictionnaire non ordonné. Mais si le tableau
étai trié, on aurait un meilleur algorithme de recherche temps d’exécution raisonnable.
II.1. La méthode de tri par sélection
Données : tableau T de taille N,
Résultats : le même tableau T ordonné dans l’ordre croissant.
L’algorithme de tri associé au tri par sélection consiste à :
- Trouver l’emplacement du plus petit élément dans T.
- Echanger l’élément trouvé avec le premier élément du tableau (i=1).
- Recommencer l’opération pour le reste du tableau (i.e. i = [2, N [.
Exemple : nous voulons trier le tableau [20, 6, 8, 1, 5]
Nous allons passer sur les étapes suivantes : [1, 6, 8, 20, 5] ; [1, 5, 8, 20, 6] ; [1, 5, 6, 20,
8] ; [1, 5, 6, 8, 20]
PSD 1ère MI 2015/2016 Chapitre 2 Les algorithmes de tri et de recherche
20
Algorithme
Pour i allant de 1 à N-1 faire
M i ;
Pour j allant de i+1 à N faire
Si t[j]< t[m] alors
M j ;
Finsi
Fin pour
A t[i] ;
T[i] T[m] ;
T[m] A ;
Finpour
II.2. la méthode de tri à bulles
Le tri à bulles est une variante du tri par sélection. Son principe consiste à échanger deux
éléments consécutifs qui ne sont pas ordonnés d’un tableau donné. Après ce parcours
l’élément le plus grand va se retrouver en dernier. Nous recommençons l’opération tant que
le tableau n’est pas trié.
Exemple : prenant le tableau de l’exemple précédent
Avant trie : [20, 6, 8, 1, 5]
Première itération [6, 20, 8, 1, 5] ; [6, 8, 20, 1, 5] ; [6, 8, 1, 20, 5] ; [6, 8, 1, 5, 20]
Deuxième itération [6, 1, 8, 5, 20] ; [6, 1, 5, 8, 20]
Troisième itération [1, 6, 5, 8, 20] ; [1, 5, 6, 8, 20]
Quatrième itération tableau trié ; aucun échange
Algorithme
Trie faux ;
TQ non trie faire
Trie vrai ;
Pour i allant de 1 à N-1 faire
Si T[i]> T[i+1] alors
Echanger(T[i], T[i+1]) ;
Trie faux ;
Finsi
Finpour
Fintantque
PSD 1ère MI 2015/2016 Chapitre 2 Les algorithmes de tri et de recherche
21
II.3. La méthode de tri par insertion
L’algorithme de tri par insertion repose sur le même principe que si on veut ordonner un
ensemble de dossiers de patients. Ayant i-1 éléments déjà triées, on essaye de mettre le ième
élément à sa place dans le tableau déjà trié. Ainsi de suite jusqu’à i=N.
Exemple : [20, 6, 8, 1, 5]
[20, 6, 8, 1, 5] ; [6, 20, 8, 1, 5] ; [6, 8, 20, 1, 5] ;[1, 6, 8, 20, 5] ; [1, 5, 6, 8, 20]
Algorithme
Pour i allant de 2 à N faire
J i ;
temp T[i] ;
TQ (T[j-1]>temp) et (j>1) faire
T[j] T[j-1] ;
J j-1 ;
finTQ
T[j] temp ;
Finpour
Exercice1 : écrire un algorithme qui permet de lire un tableau de noms, puis le tri
alphabétiquement et l’affiche en utilisant :
- Une fonction qui retourne l’indice du plus petit élément dans un tableau à partir d’un
indice donné ;
- Une procédure qui permet d’échanger deux éléments dans un tableau
- Une procédure tri_selec permettant de trier un tableau de chaîne de caractères (tri par
sélection)
Exercice2 : le même exercice avec le tri à bulles et le tri par insertion en précisant les
procédures et / fonctions nécessaires.
III. Recherche dans un tableau trié (recherche dichotomique)
Exemple : considérons un dictionnaire dont chaque mot est classé dans une case d’un
tableau. Imaginons que nous ayons 40000 mots. Nous cherchons ensuite si un mot est présent
ou pas dans le dictionnaire. La première technique consiste à parcourir tout le tableau et à
comparer les éléments avec le mot à chercher.
Trouve faux;
I 1 ;
TQ (I<=N) et (non trouve) faire
PSD 1ère MI 2015/2016 Chapitre 2 Les algorithmes de tri et de recherche
22
Si val = T [I] alors
Trouve vrai;
Indice I ;
Finsi
finTQ
Si trouve alors
Ecrire (indice);
finsi
Ça marche mais ça peut-être long. Une autre approche consiste à comparer notre mot avec
celui au milieu du tableau. S’il est antérieur, alors il se trouve (s’il existe) dans la première
moitié du tableau. Sinon, il est dans la seconde. On refait le traitement avec la moitié du
tableau qui nous intéresse.
T: tableau des mots
Prem, dern, milieu, indice: entiers
Trouve: bouléen(le ùmot existe ou n’existe pas)
Mot : le mot cherché
Algorithme
Trouvefaux;
prem1;
DernN;
milieu N div 2 ;
TQ (non trouve) et (prem<=dern) faire
si T[milieu]=mot alors
trouve vrai;
indicemilieu ;
sinon
si (T[milieu]>mot) alors
dern milieu-1;
sinon
premmilieu+1;
finsi
milieu (prem+dern)div 2
finsi
finTQ
Si trouve alors
Ecrire (indice)
finsi
PSD 1ère MI 2015/2016 Chapitre 2 Les algorithmes de tri et de recherche
23
Exercice3 : complément à l’exercice 1, après tri du tableau lire un nom et chercher son
indice dans le tableau.
SOLUTION EXERCICE1
#include <iostream>
#define max 10
using namespace std;
int n;
int indice(string t[], int id)
{
int idpp=id;
for (int j=id+1; j<n; j++)
if (t[j]<t[idpp])
idpp=j;
return idpp;
}
void echange(string t[], int id1, int id2)
{
string s;
s=t[id1];
t[id1]=t[id2];
t[id2]=s;
}
void tri_selec(string t[])
{
for(int i=0; i<n-1; i++)
{
int k = indice(t, i);
echange( t, k, i);
}
}
int main ()
{
string noms[max];
cout<<"donner le nombre de noms:";
do
cin>>n;
while ((n<=0) || (n>max));
for(int i=0; i<n; i++)
1 / 6 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !