Vous êtes sur la page 1sur 10

---------------------------------------------Les traitements avancs ---------------------------------------- Leon 1

Mthodes de tri
I. Introduction
Un tri est une opration de classement d'lments d'une liste selon un ordre dfini. Que se passe t-il dans un tri? On suppose qu'on se donne une suite de nombres entiers (exemple: 4, 2, -1, 10, 42, 0, 6) et l'on souhaite les classer par ordre croissant. La suite prcdente devient alors aprs le tri : (-1, 0, 2, 4, 6, 10, 42). Il s'agit en fait d'une nouvelle suite obtenue par une permutation des lments de la premire liste de telle faon que les lments rsultants soient classs par ordre croissant. Cette opration se retrouve trs souvent en informatique dans beaucoup de structures de donnes. Par exemple, il faut tablir le classement de certains lves. Dfinition : Un algorithme de tri est une suite dinstructions servant classer une liste d lment suivant un ordre choisi. Les algorithmes de tri traitent des tableaux situs dans la mmoire centrale (plus rapide) ou dans la mmoire secondaire (plus lente). Les algorithmes qui nous allons dfinir traitent des tableaux situs dans la mmoire centrale.

II. Les mthodes de tri


Il existe plusieurs mthodes de tri, parmi lesquelles on va choisi trois mthodes : tri bulles, tri par slection et tri par insertion. II.1 Tri Bulles a. Principe Son principe est : De parcourir la liste (1er lment, 2me, ... , nme ) en intervertissant toute paire d'lments conscutifs ((i-1)me, ime) non ordonns. Ainsi aprs le premier parcours, l'lment maximum se retrouve dans la dernire position. On recommence l'opration avec la nouvelle sous-suite (1er lment, 2me, ... , (n1)me) , et ainsi de suite jusqu' puisement de toutes les sous-suites. Le nom de tri bulle vient donc de ce qu' la fin de chaque itration, les plus grands nombres de chaque sous-suite se dplacent vers la droite successivement comme des bulles de la gauche vers la droite. b. Spcification La suite (1er lment, 2me , ... , nme) est range dans un tableau T[...] en mmoire centrale. Le tableau contient une partie trie et une partie non trie. On effectue plusieurs fois le parcours du tableau trier; le principe de base tant de r-ordonner les couples ((i-1)me, ime) non classs (en inversion de rang) dans la partie non trie du tableau. On arrte quand la partie trier est rduite un seul lment ou que le tableau est devenu tri et dans ce cas on doit avoir un indicateur qui donne cette information. c. Rsolution : --------------------------------------------- Page : 1 / 10 -------------------------------------------------

---------------------------------------------Les traitements avancs ---------------------------------------- Soit trier un tableau de n entiers par ordre croissant en utilisant la mthode de tri bulles. Analyse La grille danalyse S 3 2 1 4 Nom : Tri L.D.E Rsultat = Proc Affichage (T , n) Proc Tri_Bulles(T , n) Proc Lecture (T, n) Fin Tri Tableau de dclaration des nouveaux types Type Tab = Tableau de 20 entiers O.U Affichage Tri_bulles Lecture T, n

Tableau de dclaration des objets globaux Objet Type / nature Rle T Tab Tableau des donnes n Entier Nombre dlment de T Affichage Procdure Permet dafficher un tableau Tri_Bulles Procdure Permet de trier un tableau Lecture Procdure Permet de lire un tableau avec le nombre dlments Algorithme 0/ 1/ 2/ 3/ 4/ Analyse S 1 2 La grille danalyse de la procdure Affichage Def Proc Affichage ( A : Tab ; x : entier) L.D.E Rsultat = Affichage Affichage = [ ] Pour i de 1 x Faire Ecrire (A[i] : 4) Finpour Fin Affichage Objet i Tableau de dclaration des objets locaux Type / nature Rle Entier Compteur O.U i x A Dbut Tri Tri Proc Lecture (T, n) Proc Tri_Bulles (T, n) Proc Affichage (T, n) Fin Tri

Algorithme Def Proc Affichage ( A : Tab ; x : entier) 0/ Dbut 1/ Pour i de 1 x faire Ecrire(A[ i ] : 4) Finpour 2/ Fin Tri_Bulles Analyse --------------------------------------------- Page : 2 / 10 -------------------------------------------------

---------------------------------------------Les traitements avancs ---------------------------------------- La grille danalyse de la procdure Tri_Bulles Def proc Tri_Bulles (VAR A : Tab ; x : entier) L.D.E Rsultat = Tri_Bulles Tri_Bulles = [ ] Rpter Echange faux Pour i de 1 x-1 Faire Si A[ i ] > A[ i+1 ] Alors Aux A[ i ] ; A[ i ] A[ i+1 ] ; A[ i+1 ] Aux Echange Vrai Finsi Finpour xx-1 Jusqu (Echange = faux) ou ( x = 1) Fin Tri_Bulles Tableau de dclaration des objets locaux Objet Type / nature Rle Aux Entier Variable intermdiaire i Entier Compteur Echange boolen Rsultat boolen de tri Algorithme Def Proc Tri_Bulles (VAR A : Tab ; x : entier) 0/ Dbut 1/ Rpter Echange faux Pour i de 1 x-1 faire Si A[ i ] > A[ i+1 ] Alors Aux A[ i ] ; A[ i ] A[ i+1 ] ; A[ i+1 ] Aux Echange Vrai Finsi Finpour xx-1 Jusqu (Echange = faux) ou ( x = 1) 2/ Fin Tri_Bulles Analyse S 1 La grille danalyse de la procdure Lecture Def Proc Lecture (VAR A : Tab ;VAR x : entier) L.D.E Rsultat = Lecture Lecture = [ x = Donne (Donner un entier : ) ] Pour i de 1 x faire A[i] = Donne (Llment N : , i ) Finpour Fin Lecture Tableau de dclaration des objets Objet Type / nature Rle O.U n A i

S 3 2 1 4

O.U Echange i x A Aux

--------------------------------------------- Page :

3 / 10 -------------------------------------------------

---------------------------------------------Les traitements avancs ---------------------------------------- i Entier Compteur

Algorithme Def Proc Lecture (VAR A : Tab ; x : entier) 0/ Dbut 1/ Ecrire (Donner un entier : ) Lire (x) Pour i de 1 x faire Ecrire (Llment N : , i ) Lire( A[i]) Finpour 2/ Fin Lecture Exemple : Soit la liste ( 6 , 5 , 3 , 4 , 8 , 1 ), appliquons le tri bulles sur cette liste d'entiers. Visualisons les diffrents tats de la liste pour chaque itration : La Premire itration pour ( i de 1 6) 6 5 5 5 5 5 5 6 3 3 3 3 3 3 6 4 4 4 4 4 4 6 6 6 8 8 8 8 8 1 1 1 1 1 1 8 6 > 5 donc il faut permuter les deux cases 6 > 3 donc il faut permuter les deux cases l 6 > 4 donc il faut permuter les deux cases 6 < 8 donc aucune permutation 8 > 1 donc il faut permuter des deux cases A la fin la valeur 8 est rang dans la dernire Echange Vrai

La deuxime itration pour ( i de 1 5) 5 3 3 3 3 3 5 4 4 4 4 4 5 5 5 6 6 6 6 1 1 1 1 1 6 8 8 8 8 8 5 > 3 donc il faut permuter les deux cases 5 > 4 donc il faut permuter les deux cases 5 < 6 donc aucune permutation 6 > 1 donc il faut permuter les deux cases A la fin la valeur 6 est rang dans la dernire Echange Vrai

La troisime itration pour ( i de 1 4) 3 3 3 3 4 4 4 4 5 5 5 1 1 1 1 5 6 6 6 6 8 8 8 8 3 < 4 donc aucune permutation 4 < 5 donc aucune permutation 5 > 1 donc il faut permuter les deux cases A la fin la valeur MAX 8 est rang dans la dernire Echange Vrai

La quatrime itration pour ( i de 1 3) 3 3 3 4 4 1 1 1 4 5 5 5 6 6 6 8 8 8 3 < 4 donc aucune permutation 4 > 1 donc il faut permuter les deux cases l 6 > 4 donc il faut permuter les deux cases Echange Vrai

La cinquime itration pour ( i de 1 2) --------------------------------------------- Page : 4 / 10 -------------------------------------------------

---------------------------------------------Les traitements avancs ---------------------------------------- 3 1 1 3 4 4 5 5 6 6 8 8 3 > 1 donc il faut permuter les deux cases 3 < 4 donc aucune permutation Echange Vrai

La sixime itration pour ( i de 1 1) 1 3 4 5 6 8 Tableau tri Faux faux et i = n

II.2 Tri par Slection a. Principe 1. Dterminer lemplacement du plus petit lment (ou du plus grand lment). 2. Echanger le contenu du plus petit lment (ou du plus grand lment) trouv avec le premier lment de la liste. 3. Refaire les tapes 1 et 2 en commenant la recherche du plus petit lment (ou du plus grand lment) partir du deuxime lment, puis de le permuter avec ce dernier. 4. Ce traitement sera rpt tant de fois que le nombre dlments de la liste moins1. Ecrire une analyse, algorithme et un programme permettant de trier par slection et en ordre croissant un tableau dentier de taille variable. b. Rsolution : Analyse S 1 La grille danalyse de la procdure Tri_selection Def proc Tri_selection (VAR A : Tab ; x : entier) L.D.E Rsultat = Tri_selection Tri_selection = [ ] Pour i de 1 x-1 Faire [Pos_min i ] Pour j de i+1 x faire Si A[Pos_min ] > A[ j] Alors Pos_min j Finsi FinPour Si A[Pos_min ] A[ i ] Alors Aux A[ i ] ; A[ i ] A[ pos_min ] ; A[ pos_min] Aux Finsi Finpour Fin Tri_selection Objet Aux i, j Pos_min Tableau de dclaration des objets locaux Type / nature Rle Entier Variable intermdiaire Entier Deux compteurs Entier La position de minimum O.U j i x A Aux Pos_min

Algorithme 0/ Dbut 1/ Pour i de 1 x-1 Faire Pos_min i --------------------------------------------- Page : 5 / 10 -------------------------------------------------

---------------------------------------------Les traitements avancs ---------------------------------------- Pour j de i+1 x faire Si A[Pos_min ] > A[ j] Alors Pos_min j Finsi FinPour Si A[Pos_min ] A[ i ] Alors Aux A[ i ] A[ i ] A[ pos_min ] A[ pos_min] Aux Finsi Finpour 2/ Fin Tri_selection Exemple : Soit la liste ( 6 , 5 , 3 , 4 , 8 , 1 ), appliquons le tri par slection sur cette liste d'entiers. Visualisons les diffrents tats de la liste pour chaque itration : 6 1 1 1 1 1 5 5 3 3 3 3 3 3 5 4 4 4 4 4 4 5 5 5 8 8 8 8 8 6 1 On se pointe la 1re case et on cherche le minimum dans le reste du et on permute 1 et 6. 6 On se pointe la 2me case et on cherche le minimum dans le reste et on permute 5 et 3. 6 On se pointe la 3me case et on cherche le minimum dans le reste et on permute 5 et 4. 6 On se pointe la 4me case et on cherche le minimum dans le reste Aucune permutation 6 On se pointe la 5me case et on cherche le minimum dans le reste et on permute 8 et 6 8 Tableau tri

II.3 Tri par Insertion a. Principe Son principe est de parcourir la liste non trie (T[1], T[2], ... , T[n]) en la dcomposant en deux parties une partie dj trie et une partie non trie. L'opration de base consiste : Prendre le 1er lment dans la partie non trie, Insrer sa place dans la partie trie (place que l'on recherchera squentiellement), Dplacer les lments que se trouve entre la position trouve et la position de llment considr dans la partie non tri d'une position vers la droite. Refaire ces insertions tant qu'il reste un lment ranger dans la partie non trie. L'insertion de l'lment est effectue par dcalages successifs d'une case.

La liste (T[1], T[2], ... , T[n]) est dcompose en deux parties : Une partie trie (T[1], T[2], ... , T[k]) et une partie non-trie (T[k+1], T[k+2], ... , T[n]); Llment T[k+1] est appel lment frontire (cest le premier lment non tri ). Les lments du tableau sont rangs dans la mmoire centrale. b. Rsolution : Analyse La grille danalyse de la procdure Tri_Insertion --------------------------------------------- Page : 6 / 10 -------------------------------------------------

---------------------------------------------Les traitements avancs ---------------------------------------- S 1 Def proc Tri_ Insertion (VAR T : Tab ; x : entier) L.D.E Rsultat = Tri_ Insertion Tri_ Insertion = [ ] Pour i de 2 x Faire v T[ i ] ji Tant que (T[ j-1 ] > v ) Faire T[ j ] T[ j -1 ] jj -1 FinTantque T[ j ] v Finpour Fin Tri_ Insertion Objet v i, j Tableau de dclaration des objets locaux Type / nature Rle Entier Variable intermdiaire Entier Deux compteurs O.U j i x T v

Algorithme Def Proc Tri_Insertion (VAR T : Tab ; x : entier) 0/ Dbut 1/ Pour i de 2 x Faire v T[ i ] j i Tant que (T[ j-1 ] > v ) Faire T[ j ] T[ j-1 ] j j -1 FinTantque T[ j ] v Finpour 2/ Fin Tri_Insertion Traduction en Pascal : Program TriParInsertion ; Uses Wincrt ; Type Tab = Array [1..20] of integer; Var A : Tab ; n : integer Procedure Tri_Insertion (VAR T : Tab; x: integer) ; Var i, j, v : integer; Begin For i := 2 To x do Begin v := T[ i ]; j := i ; While T[ j-1 ] > v do Begin T[ j ] := T[ j-1 ] ; j := j - 1 ; --------------------------------------------- Page : 7 / 10 -------------------------------------------------

---------------------------------------------Les traitements avancs ---------------------------------------- End; T[ j ] := v ; End ; End; Procedure Lecture (Var T : Tab ; Var x : integer) ; Var i : integer; Begin Write(Donner un entier : ); Readln (x ); For i := 1 to x do Begin Write(Donner llmnt N: , i, : ); Readln (T[i] ); End; End; Procedure Affichage (T : Tab ; x : integer) ; Var i : integer; Begin For i:= 1 To x do Write(T[i] : 4 ); End; Begin Lecture (A, n); Writeln('-------------------------TRI PAR INSERTION---------------------------'); Writeln; Affichage (A, n); Tri_Insertion (A, n ); Affichage (A, n); End. Lexcution

--------------------------------------------- Page :

8 / 10 -------------------------------------------------

---------------------------------------------Les traitements avancs ----------------------------------------

III. Application
Nous disposons de deux tableaux Tnom de n chanes de caractres non vides et Tmoy de n moyennes. Une moyenne est un rel entre 0 et 20. Utilisant la mthode par insertion pour crire un programme Pascal qui permet de ranger les lments de Tmoy avec Tnom. Si deux lments de Tnom ont une moyenne identique, lordre alphabtique des chanes intervient. Program Exercice1; Uses Wincrt; Type Tab1 = Array [1..20] of real; Tab2 = Array [1..20] of String; Var Tnom:Tab2; Tmoy : Tab1; i, n : Integer; {--------------------------------------------------------------------------------------------------------------} Procedure Lecture (Var T1: Tab1; Var T2: tab2; Var n: integer); Var i : integer; Begin Write('Donner un entier : '); Readln(n); For i:= 1 To n Do Repeat Writeln('Pour l''lve N',i,' : '); Write (' Donner le nom : '); Readln (T2[i]); Write (' Donner la moyenne : '); Readln (T1[i]); Writeln('----------------------------------'); Until ((T1[i] <= 20) And (T1[i] >=0))And ((T2[i] <>'')); End; {--------------------------------------------------------------------------------------------------------------} Procedure Tri (VAR T1 : Tab1; var T2 : Tab2 ; x :integer) ; Var i, j : integer; v1 : real; v2, aux: String; Begin For i := 2 To x do Begin v1 := T1[i]; v2 := T2[i]; j := i ; While (T1[j-1] > v1) do Begin T1[j] := T1[j-1] ; T2[j] := T2[j-1] ; j := j - 1 ; End; T1[j] := v1 ; --------------------------------------------- Page : 9 / 10 -------------------------------------------------

---------------------------------------------Les traitements avancs ---------------------------------------- T2[j] := v2 ; While (T1[j] = T1[j-1]) Do Begin If (T2[j] < T2[j-1]) Then Begin aux := T2[j]; T2[j] := T2[j-1]; T2[j-1] := aux; End; j := j-1; End; End ; End; {--------------------------------------------------------------------------------------------------------------} Procedure Affiche (T1: tab1; T2: Tab2; n :integer); Var i: integer; Begin For i := 1 To n Do Writeln ((,Tnom[i],',', Tmoy[i]:6:2,), ); End; {--------------------------------------------------------------------------------------------------------------} Begin Lecture(Tmoy, Tnom, n); Tri (Tmoy, tnom, n); Affiche (Tmoy, Tnom, n); End. Excution

--------------------------------------------- Page : 10 / 10 -------------------------------------------------

Vous aimerez peut-être aussi