You are on page 1of 7

Les algorithmes de tri et de

recherche
Définition : un algorithme de tri est un algorithme qui permet d'organiser une collection
d'objet selon un ordre déterminé (l'alphabet des noms, l'ordre des valeurs entières, …).
Dans ce chapitre nous allons découvrir trois algorithmes de tri :
Tri par sélection
Tri à bulles
Tri par insertion

Activité : Ecrire une analyse et un algorithme d’un sous programme qui permet de
trier (classer) les éléments du tableau T dans l'ordre croissant.

I°) Les algorithme de tri
1°) Tri par sélection
a°) Principe :
partir du premier élément, parcourir le tableau, chercher le plus petit élément et
l'échanger avec le premier
puis de repartir du second élément, parcourir le tableau, chercher le plus petit
élément et l'échanger avec le second, etc ..
b°) Solution de l’activité
Analyse et Algorithme de la procédure Tri_Selection
DEF Proc Tri_Selection (var T : tab ; n :
entier) 0) DEF Proc Tri_Selection (var T : tab ; n : entier)
Résultat =[..] 1) Pour i de 1 à n-1 faire
Pour i de 1 à n-1 faire m <----- FN Pos_min (T,i,n)
m <----- FN Pos_min (T,i,n) si T[m] <> T[i ] alors
si T[m] <> T[i ] alors proc Permuter (T[i],T[m])
proc Permuter (T[i],T[m]) Finsi
Finsi Fin pour
T.D.O
Fin pour 2) Fin Tri_Selection
Objet Type/Nature
i, m Entier
Pos_min Fonction
Permuter Procédure

Analyse et Algorithme de la fonction Pos_min

1

l’idée est de vérifier si lors du dernier parcours aucune permutation n’a été faite ce qui signifie le tableau est devenu trié.O Objet Type/Nature Min. j Entier Analyse et Algorithme de la procédure Permuter DEF Proc permuter (var a.i 2) Pour j de i+1 à n faire Pour j de i+1 à n faire si T[j] < T[Min] alors si T[j] < T[Min] alors Min <----.j Finsi Finsi Fin pour Fin pour 3) Pos_min <---. On recommence cette opération en parcourant de 1 à n-1 puis de 1 à n-2 et ainsi de suite.Min Pos_min <---.j Min <----. on passe ensuite au 2ième et 3ième. b : entier) temp a 1) temp a a b 2) a b b temp 3) b temp T. En effet. On arrête quand la partie à trier est réduite à un seul élément ou que le tableau est devenu trié et dans ce cas on doit avoir un indicateur qui donne cette information. C’est-à-dire qu’on va comparer le 1er et le 2ième élément du tableau. puis au 3ième et 4ième et ainsi de suite jusqu’au (n-1)ième et le nième éléments.D. b : entier) 0) DEF Proc permuter (var a.DEF FN Pos_min (T : tab .] 1) Min <---. i : entier) : entier 0) DEF FN Pos_min (T : tab .i Min <---.D. 2 .. s’ils ne sont pas dans le bon ordre. i. on les permute. on aura poussé le plus grand élément du tableau vers sa place finale qui est le nième élément du tableau. n.O : 4) Fin Permuter Objet Type/Nature temp Entier 2°) Tri à bulles a°) Principe : le tri à bulles consisté à faire remonter le plus grand élément du tableau en comparant les éléments successifs. A la fin du premier parcours. i : entier) : entier Résultat =[. n.Min 4) Fin Pos_min T.

T[i-2]. 1) Pour chaque élément n° i à insérer : Utiliser une variable intermédiaire "temp" pour conserver la valeur à insérer. On prend un dossier et on le met à sa place parmi les dossiers déjà triés. …. 2) Répéter l'action 1 jusqu'à atteindre la fin du tableau. T[i+1]) Proc permuter (T[i].b°) Solution de l’activité Analyse et Algorithme de la procédure tri_à_bulle DEF Proc Tri_à_bulle (var T : tab . Déplacer les éléments (T[i-1].n-1 n <---. puis on recommence avec le dossier suivant et ainsi de suite.vrai echange <---.faux Pour i de 1 à n-1 faire Pour i de 1 à n-1 faire Si (T[i] > T[i+1]) alors Si (T[i] > T[i+1]) alors Proc permuter (T[i].D.O Objet Type/Nature i Entier Permuter Procédure echange Fonction 3) Tri par insertion a°) Principe : c'est le tri qu'on l'utilise lorsqu'on a des dossiers à classer.n-1 Jusqu’à (n = 1) ou (echange = faux) Jusqu’à (n = 1) ou (echange = faux) 2) Fin tri_à_bulle T. n : entier) entier) Répéter 1) Répéter echange <---.) vers la droite tant que la valeur à insérer est supérieure à celle de "temp". T[i+1]) echange <---.faux echange <---. Le principe est le suivant : On suppose que les éléments de 1 à (i-1) du tableau sont triés et on place (on insère) l'élément n°i à sa bonne place parmi les (i-1) déjà triés.vrai Fin si Fin si Fin pour Fin pour n <---. Affecter la variable "temp" à la case laissé libre (vide) après le décalage. n : 0) DEF Proc Tri_à_bulle (var T : tab . b°) Solution de l’activité Analyse et Algorithme de la procédure tri_par_insertion 3 .

y : entier . p) T[p] <----. temp.D. x.O Objet Type/Nature i .T[z-1] z<---.z-1 z<---.temp Finsi Finsi Fin pour Fin pour 2) Fin Tri_insertion T. 0) DEF Proc Tri_par_insertion (var T : tab .T[i] Proc Décaler (T.T[z-1] T[z] <---.T[i] temp <---. p Entier Décaler Procédure Analyse et Algorithme de la procédure Décaler DEF Proc Décaler (var T : tab .z-1 Fin tant que Fin tant que z<---. temp. p) Proc Décaler (T. 0) DEF Proc Décaler (var T : tab .i z<---.temp T[p] <----.DEF Proc Tri_par_insertion (var T : tab . x.i 2) Fin Décaler II°) Les algorithme de recherche 4 . temp. i.y : entier . i. var z : entier) var z : entier) Tant que (z>1) et (T[z-1]> y) faire 1) Tant que (z>1) et (T[z-1]> y) faire T[z] <---. n : n : entier) entier) Pour i de 2 à n faire 1) Pour i de 2 à n faire Si T[i-1]>T[i] alors Si T[i-1]>T[i] alors temp <---.

Activité : Ecrire un programme nommée « recherche_élément » qui permet de remplir un tableau T par n entiers (5 ≤ n ≤ 30) puis saisir un valeur v. 1°) La recherche séquentielle : a°) Principe : La méthode de recherche séquentielle d’un élément dans un tableau consiste à parcourir le tableau élément par élément en le comparant avec l’élément à chercher jusqu’à trouve ce dernier ou atteindre la fin du tableau.n.v)Tableau de déclaration des nouveaux types Proc remplir (T.n) n.30] d’entier Algorithme Tableau de déclaration des objets : 0) Début recherche_élément Objet Type/Nature 1) Proc Remplir (T.FN recherche (T. b°) Analyse et algorithme de la fonction recherche Analyse de la fonction recherche séquentielle 5 .n) Types V = donnée ("saisir la valeur à chercher ") Tab = Tableau de [1. Solution de l’activité Programme Principal Analyse : Résultat = écrire ("la valeur ".n. V Entier 2) écrire ("Entrer un entier ") lire (V) T Tab 3) exist FN recherche (T. exist) exist <----.V) Remplir Procédure 4) écrire ("la valeur ".. exist) recherche Fonction 5) Fin recherche_élément Remarque : il existe deux méthodes de rechercher : La recherche séquentielle La recherche dichotomique. ensuite il appelle une fonction recherche qui cherche si v existe ou non dans le tableau T.

Analyse : Résultat = [.n."n’existe pas" Fin si 5) Fin recherche 2°) La recherche dichotomique : a°) Principe : 1) Initialiser les indices des bornes début à 1 et fin à n 2) Diviser les éléments du tableau en deux parties (gauche et droite).] Si T[i]= v alors recherche <----."existe" Sinon recherche <----.i+1 Jusqu’à (T[i]=v) ou (i=n) Algorithme 0) DEF FN recherche (T :tab . Répéter les étapes 1) et 2) jusqu'à soit trouver l'élément recherché ou bien l'indice de la borne gauche sera > à celui de la borne droite. Analyse de la fonction recherche dichotomique 6 .0 Répéter i <----. 3) Vérifier à quelle partie appartient l'élément recherché : s'il appartient à la partie gauche alors cette partie sera l'intervalle de recherche donc modifier l'indice de la borne droite (fin milieu -1)."n’existe pas" Fin si i<---.. Sinon la partie droite sera l’intervalle de recherche et donc modifier l'indice de la borne gauche (début milieu+1)."existe" Objet Type/Nature i Entier Sinon recherche <----.v :entier) : chaîne de caractère 1) i 0 répéter i i+1 Jusqu’à (T[i]=v) ou (i=n) Tableau de déclaration des objets : 2) si T[i] = v alors recherche <----.

.n] Répéter p <----.v :entier) : chaîne de caractère 1) [debut <---.] Si T[p]= v alors recherche <----.p ."n’existe pas" [debut <---.(debut + fin) div 2 si v < T[p] alors Tableau de déclaration des objets : fin <----.1 Objet Type/Nature Sinon p Entier debut <----.p + 1 Fin si Jusqu’à (T[p]=v) ou (debut > fin) Algorithme 0) DEF FN recherche (T :tab . fin <---.n] Répéter p <----.(debut + fin) div 2 si v < T[p] alors fin <----.n."n’existe pas" Fin si 5) Fin recherche III°) Applications: On dispose d’un tableau ABONNE de noms ainsi qu’un tableau TEL 7 . fin <---.p .p + 1 Fin si Jusqu’à (T[p]=v) ou (debut > fin) 2) si T[p] = v alors recherche <----."existe" Sinon recherche <----.1. Analyse : Résultat = [."existe" Sinon recherche <----.1 Sinon debut <----.1.