Lycée Pilote de Sousse 2011/2012 Tri par sélection Le tri par

publicité
Lycée Pilote de Sousse 2011/2012
Tri par sélection
Le tri par sélection est un algorithme de tri par comparaison. Il est particulièrement simple,
mais inefficace sur de grandes entrées.
Sur un tableau de n éléments (numérotés de 1 à n), le principe du tri par sélection est le
suivant :
 Commencer par i=1 et on cherche la position de l'élément le plus petit du tableau
(pmin).

Une fois cet emplacement trouvé, on compare son contenu avec T[1] et s'il sont
différents(i ≠ pmin]), on permute l'élément de l'emplacement trouvé par l'élément
de la première position T[1] sinon T[1] reste à sa place
 Après ce parcours le premier élément est bien placé.
 On recommence le même procédé pour le reste du tableau (T[2]..T[n]), ainsi on
recherche le plus petit élément de cette nouvelle partie du tableau et on l'échange
éventuellement avec T[2].
 Ainsi de suite jusqu'à la dernière partie du tableau formée par les deux derniers
éléments (T[n-1]..T[n]]).
Analyse programme TriSel :
Résultat = proc affichage(t,n)
T=proc tri (t,n)
T,N=proc saisie (t,n)
Fin TriSel
T.D.N.T
Type
Tab = tableau de 50 entiers
T.D.O
Type
Objet
N
T
Affichage
Tri
saisie
Entier
Tab
Procédure
Procédure
Procédure
Rôle
Taille tableau
Tableau d’entiers
Affichage tableau trié
Tri du tableau
Saisie contrôlée de n
Algorithme
0) debut triSel
1) Proc sasie (t,n)
2) Proc tri (t,n)
3) Proc affichage (t,n)
4) Fin triSel
Page 1 sur 4
Lycée Pilote de Sousse 2011/2012
Analyse de la procédure Tri :
Def Proc Tri (var t :tab ; n :entier)
Résultat = t
T=[] pour i de 1 à n-1 faire
[Pmin i]
Pour j de i+1 a n faire
Si t[j]<t[pmin] alors
Pmin  j
finSi
finPour
si i<>pmin alors
Proc permuter (t[i],t[pmin])
Fin si
finPour
Fin Tri
T.D.O Locaux
Objet
Type
Rôle
I,j
Entier
Compteur
Permuter procédure
Permuter deux cases
Pmin
Entier
Position min
Algorithme Tri
0) Def Proc Tri (var t :tab ; n :entier)
1) Pour i de 1 à n-1 faire
Pmin i
Pour j de i+1 a n faire
Si t[j]<t[pmin] alors
Pmin  j
FinSi
FinPour
si i<>pmin alors
Proc permuter (t[i],t[pmin])
Fin si
FinPour
2) Fin Tri
Analyse de la procédure Permuter
Def proc permuter (var a :entier ; var b :entier)
Résultat = (a,b)
bp
ab
Objet
p a
p
Fin Permuter
T.D.O Locaux
Type
Rôle
Entier
Variable temporaire
Algorithme
0) Def Proc permuter ( var a : entier ; var b : entier)
1) p a
2) a b
3) b  p
4) Fin permuter
Page 2 sur 4
Lycée Pilote de Sousse 2011/2012
Analyse de la procédure Affichage
Def proc Affichage (t:tab; n: entier)
Résultat = Affichage
Affichage = [] Pour c de 1 à n faire
Ecrire (t[c], ‘’ | ‘’)
finPour
Fin affichage
Objet
c
T.D.O Locaux
Type
Entier
Rôle
Compteur
Algorithme Affichage
0) Def proc Affichage (t:tab; n: entier)
1) Pour c de 1 à n faire
Ecrire (t[c], ‘’ | ‘’)
finPour
2) Fin Affichage
Analyse de la procédure Saisie :
Def Proc saisie (var t:tab; var n:entier)
Résultat = t,n
T=[] pour i de 1 à n faire
T[i]= donnée (''Donner l''élément t['',i,'']='')
FinPour
N=[]Répéter
N=donnée (''Donner n la taille du tableau:'')
Jusqu'à n dans [2..50]
Fin Saisie
Objet
i
T.D.O Locaux
Type
Entier
Rôle
Compteur
Algorithme Saisie:
0) Def Proc saisie (var t:tab; var n:entier)
1) Répéter
Ecrire(''Donner n la taille du tableau:'')
Lire (n)
Jusqu'à n dans [2..50]
2) pour i de 1 à n faire
Ecrire(''Donner l''élément t['',i,'']='')
Lire (t[i])
FinPour
3) Fin Saisie
Traduction Pascal : {Tri par sélection ordre croissant}
program trisel;
uses wincrt;
Type
tab=array[1..50]of integer;
var
t:tab;
n:integer;
Page 3 sur 4
Lycée Pilote de Sousse 2011/2012
procedure saisie(var T:tab;var n:integer);
var
i:integer;
begin
repeat
Write('Donner n la taille du tableau : ');
readln(n);
until n in [2..50];
for i:=1 to n do
begin
Write('Donner l''élément T[',i,']=') ;
Readln(T[i]);
end;
end;
Procedure permuter( var a:integer; var b:integer);
Var
p : integer;
begin
p:=a;
a:=b;
b:=p;
end;
Procedure tri(var T:tab; n:integer);
var
i,j,pmin:integer;
begin
for i:=1 to n-1 do
begin
pmin:=i;
for j:=i+1 to n do
if t[j]<T[pmin] then pmin:=j;
if i<>pmin then
permuter(T[i],T[pmin]);
end;
end;
procedure affichage(T:tab; n:integer);
var
i:integer;
begin
writeln('Le tableau trié est : ');
for i:=1 to n do
write(T[i]:5);
end;
begin
saisie(T,n);
tri(T,n);
affichage(T,n);
end.
Page 4 sur 4
Téléchargement