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) bp ab 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