Vous êtes sur la page 1sur 3

Chapitre 6: Les traitements avancés ➔ Le tri par insertion:

Leçon 1 3.1. Principe:


Méthodes de tri 1 2 3 4 5 6 on suppose que les i-1 premiers éléments sont triés
T ● On chercher la position du ième élément dans la
I-Introduction: partie du tableau commençant de 1 à i.
Permutation
➔Définition: Un algorithme de tri est une suite T[pos_min] ● Si cette position est i, l'élément est donc à sa bonne
si i ≠ pos_min
finie d'instructions servant à réordonner une place.
séquence d'éléments suivant un critère fixé à ● Sinon, supposant que cette position est j; ce j est
priori. Ce critère est en effet une relation d'ordre forcement entre 1 et i-1.→ (1) on affecte T[i] à une
N.B: La recherche du plus petit élément d'un tableau variable auxiliaire tmp, (2) On décale d'un pas vers
total sur les éléments à trier.
sera assurée par une fonction renvoyant la position du l'avant (à droite) tous les éléments de j à i-1 (3) puis
La conception d'un algorithme de tri dépend du support
minimum. Ce minimum est éventuellement répété on insère l'élément d'indice i ( précédemment
matériel de la séquence de valeurs à trier (en mémoire
plusieurs fois dans T; on décidera de choisir le premier. sauvegardé dans tmp) à la position j.
centrale ou sur une mémoire secondaire).
Remarque: On commence ce procédé à partir du 2 ème éléments i=2
Mémoires centrales: rapides (en nanosecondes)
nombre d'opérations nécessaires pour trier tout le jusqu'à atteindre la fin du tableau.
mais de taille limitée(en Mo) tableau T:
Mémoires secondaires: lentes(en microsecondes) à chaque itération on on démarre à l'élément T[i] et on le 4 insertion dans T[j] tmp
décalages
mais de grande taille (en Go). compare successivement à T[i+1], T[i+2] .T[n] 3 2 1 sauvegarder T[i]
Les algorithmes de tri vont en devoir tenir compte. on fait donc n-i comparaison.
Les algorithmes de tri que nous allons définir traitent On commence avec i=1 et on finit avec i=n-1
des tableaux situés dans la mémoire centrale. Donc, on fait (n-1)+n-2)+..+2+1= n(n-1)/2 comparaisons L'élément à insérer
Remarques: et au maximum n-1 permutations. Partie triée du tableau à sa place après
 Il faut faire la distinction entre tri d'un grand décalages des éléments
➔ Le tri à bulle: Remarque:
nombre d'éléments et le tri de quelques éléments.
2.1. Principe: Dans le pire des cas le tri par insertion fait 1+2+...+n-1
 On peut trier autres types que les entiers. Il suffit
Faire remonter le plus grand élément du tableau en comparaisons et autant de décalages.→Il fait n(n-1)
de disposer d'un domaine de valeurs muni d'une
comparant les éléments successifs. opérations(comparaisons et décalages confondus)
relation d'ordre total. On peut donc trier des
● On commence par i=1,on compare le 1er(T[1]) et
caractères, des mots en ordre alphabétique...
le 2éme élément(T[2]) du tableau, s'il ne sont pas
Leçon 2
II-Les méthodes de tri: Algorithmes de recherche
Devoirs et examens sur : www.Kiteb.net

dans le bon ordre, on les permute, on passe ensuite


On a choisit de trier les séquences par ordre croissant au 2ème (T[2])et 3ème (T[3]), puis 3ème et 4ème et ainsi d'un élément dans un tableau
(de plus petit au plus grand) relativement à un ordre total de suite jusqu'au (n-1)ième (T[n-1])et nième éléments
noté ≤ . (T[n]). I-Introduction: Recherche d'un élément dans un
➔ Le tri par sélection: ● À la fin du premier parcours, on aura pousser le tableau par deux méthodes:
1.1. Principe: plus grand élément du tableau vers sa place finale II-La recherche séquentielle:
● Commencer par i=1 et on cherche la position de qui est le nième élément du tableau. ➔Définition: La méthode de recherche séquentielle
l'élément le plus petit du tableau (pos_min). ● On recommence cette opération en parcourant de d'un élément dans un tableau consiste à parcourir le
● Une fois cet emplacement trouvé, on compare son 1 à n-1 puis de 1 à n-2 et ainsi de suite. tableau élément par élément progressivement de début
contenu avec T[1] et s'il sont ● On arrête quand la partie à trier est réduite à un vers la fin en les comparant avec l'élément à chercher
différents(T[1]≠T[pos_min]), on permute l'élément de seul élément ou que le tableau est devenu trié (c.à.d jusqu'à trouver ce dernier ou achever le tableau.
l'emplacement trouvé par l'élément de la première aucune permutation n'a été faite lors du dernier
parcours à vérifier par un indicateur)
III-La recherche dichotomique:
position T[1] sinon T[1] reste à sa place→ Après ce
parcours le premier élément est bien placé.
1 2 3 4 5 6 ➔Définition: La méthode de recherche dichotomique
● On recommence le même procédé pour le reste T consiste à chercher un élément dans un tableau trié.
du tableau (T[2],..,T[n]), ainsi on recherche le plus 1 2 3 4 5 On compare l'élément à chercher à l'élément central du
petit élément de cette nouvelle partie du tableau et Permutation deux par deux si pas dans le bon ordre tableau, s'il son différents, un test permet de trouver
on l'échange éventuellement avec T[2]. Remarque: Dans le pire des cas le tri à bulles fait (n- dans quelle moitié du tableau on peut trouver l'élément.
● Ainsi de suite jusqu'à la dernière partie du tableau 1)+(n-2)+...+2+1 comparaisons et autant de
On contenue ce processus jusqu'à trouver l'élément ou
formée par les deux derniers éléments( T[n-1],..T[n]]). permutations.
bien arrive à un sous-tableau de taille 1.
Tri par sélection : Tri à bulles : Tri par insertion :
Analyse du Programme principal : Analyse du Programme principal : Analyse du Programme principal :
NOM : sélection NOM : Bulles
Résultat=PROC Afficher(T, n) Résultat=PROC Afficher(T, n) NOM : Insertion
Proc Tri_Selction(T, n) Proc Tri_Bulles(T, n) Résultat=PROC Afficher(T, n)
Proc Remplir(T,n) Proc Remplir(T,n) Proc Tri_Insertion(T, n)
FIN Sélection FIN Bulles Proc Remplir(T,n)
Tableau de déclaration de nouveaux types : Tableau de déclaration de nouveaux types : FIN Insertion
Type Type
Tab= tableau de 9 entiers Tab= tableau de 9 entiers Tableau de déclaration des nouveaux types :
TDO.Globaux: Analyse de la procédure Remplir : Type
Objet Type/Nature DEF Proc Remplir ( VAR T :TAB ; n :entier) Tab= tableau de 9 entiers
n Constante=9 Résultat= [ ] Pour i de 1 à n faire T.D.O. Globaux :
T Tab T[i] hasard (101) Objet Type/Nature
Analyse de la procédure Remplir : FinPour Affiche,tri_insertion, Remplir Procédure
DEF Proc Remplir ( VAR T :TAB ; n :entier) FIN Remplir T Tab
Résultat= [ ] Pour i de 1 à n faire n Constante=9
T[i] hasard (101) Analyse de la procédure Tri_Bulles:
FinPour DEF Proc Tri_Bulles (VAR T :TAB ; n :entier) Analyse de la procédure Remplir :
FIN Remplir Résultat= [] Répéter DEF Proc Remplir ( VAR T :TAB ; n :entier)
Analyse de la procédure Tri_Selection: [ Echange faux] Pour i de 1 à n-1 faire Résultat= [ ] Pour i de 1 à n faire
DEF Proc Tri_selection (VAR T :TAB ; [] Si ( T[i] > T[i+1])Alors T[i] hasard (101)
n :entier) Permute(T[i], T[i+1]) FinPour
Résultat= [] Pour i de 1 à n-1 faire Echange  vrai
[pos_mini] Pour j de i+1 à n faire FinSi FIN Remplir
[] Si ( T[j] < T[pos_min])Alors FinPour Analyse de la procédure Tri_Insertion :
pos_min  j nn-1
Finsi Jusqu'à (Echange = Faux) ou (n=1) DEF Proc Tri_Insertion (VAR T :TAB ;
Devoirs et examens sur : www.Kiteb.net

FinPour n :entier)
FIN Tri_Bulles Résultat= [ ] Pour i de 2 à n faire
[] Si ( pos_min < > i)Alors
Permute(T[i], T[Pos_min]) Tmp  T[i]
Finsi [ji]
Analyse de la procédure Permute : Tant que ( j >1) et ( T[j-1] > Tmp ) faire
FinPour
FIN Tri_Selection DEF Proc Permute ( VAR A, B :entier) T[j ] T[j-1]
Résultat= AUX A j  j - 1;
Analyse de la procédure Permute :
AB FinTantQue
DEF Proc Permute ( VAR A, B :entier)
BAUX T[j ] Tmp
Résultat= AUX A
FinPour
AB FIN Permute
BAUX FIN Tri_Insertion
FIN Permute Analyse de la procédure Afficher:
Analyse de la procédure Afficher:
Analyse de la procédure Afficher: DEF Proc Afficher ( T :Tab ;n :entier)
DEF Proc Affiche ( T :Tab ;n :entier) Résultat= Pour i de 1 à n faire DEF Proc Afficher ( T :Tab ;n :entier)
Résultat= [] Pour i de 1 à n faire Ecrire(" l’élément n° ",i, "est " ,T[i]) Résultat= Pour i de 1 à n faire
Ecrire(" l’élément n° ",i, "est " ,T[i]) FinPour Ecrire(" l’élément n° ",i, "est " ,T[i])
FinPour FinPour
FIN Afficher FIN Afficher
FIN Afficher
Tri par sélection : Tri à bulles : Tri par insertion :
program insertion;
program selection; program bulles; uses wincrt;
uses wincrt; uses wincrt; const n=9;
const n=9; const n=9; type
type tab=array[1..n]of integer; type tab=array[1..n]of integer; tab=array[1..n]of integer;
var var var
t:tab; t:tab; t:tab;
procedure remplir(var T:tab;n:integer); procedure remplir(var T:tab;n:integer);
var i:integer; var i:integer;
begin begin procedure remplir(var T:tab;n:integer);
randomize; randomize; var i:integer;
for i:=1 to n do for i:=1 to n do begin
t[i]:=random(101); t[i]:=random(101); randomize;
end; end; for i:=1 to n do
t[i]:=random(101);
procedure permute (var A,B:integer); procedure permute (var A,B:integer); end;
var Aux:integer; var Aux:integer;
begin begin
aux:=A; Procedure Tri_Insertion(var t:tab;n: integer);
aux:=A; var i, j, tmp : integer;
A:=B; A:=B;
B:=aux; begin
B:=aux; for i:=2 to n do
end; end;
function premposmin(t:tab;i:integer;n:integer):integer; begin
var j,posmin:integer; procedure tri_bulles(var t:tab; n:integer); tmp := t[i];
begin var i:integer;echange :boolean ;
posmin:=i; begin j := i;
for j:=i+1 to n do while (j > 1) and (t[j-1] > tmp) do
if t[j]<t[posmin] then posmin:=j; repeat begin
premposmin:=posmin; echange :=false ; t[j] := t[j-1];
end; for i :=1 to n-1 do j := j - 1;
begin end;
procedure tri_selction(var t:tab; n:integer);
var i,ppm:integer; if ( T[i] > T[i+1]) then
Devoirs et examens sur : www.Kiteb.net

begin begin t[j] := tmp;


for i:=1 to n-1 do Permute(T[i], T[i+1]) ; end;
begin Echange :=true; end;
ppm:=premposmin(t,i,n); End ;
if i<>ppm then permute( t[i],t[ppm]);
End ; n :=n-1 ; procedure afficher(t:tab;n:integer);
end;
end; Until (echange = false)or (n=1) ; var i:integer;
End ; begin
procedure afficher(t:tab;n:integer);
var i:integer; procedure afficher(t:tab;n:integer); for i:=1 to n do
begin var i:integer; writeln('l''element n° ',i,' est ',t[i]);
for i:=1 to n do begin end;
writeln('l''element n° ',i,' est ',t[i]); for i:=1 to n do
end; writeln('l''element n° ',i,' est ',t[i]); begin
end; remplir(t,n);
begin writeln('********avant le tri********’);
remplir(t,n); begin afficher(t,n);
writeln('********avant le tri********’); remplir(t,n); tri_insertion(t,n);
afficher(t,n); writeln('********avant le tri********’); writeln('********après le tri********');
tri_selction(t,n); afficher(t,n); afficher(t,n);
writeln('********après le tri********'); tri_bulles(t,n); end.
afficher(t,n); writeln('********après le tri********');
end. afficher(t,n);
end.

Vous aimerez peut-être aussi