Sunteți pe pagina 1din 2

§4. Metoda selecţiei.

Sortarea prin selecţia minimului (sau maximului) este metoda de ordonare


prin selectarea unui element şi plasarea lui pe poziţia sa finală direct în tabloul
A.
De exemplu, în caz de ordonare crescătoare, pornind de la primul element se caută
valoarea minimă din tablou. Aceasta se aşează pe prima poziţie printr-o
interschimbare între elementul de pe prima poziţie şi elementul minim de pe
poziţia k. Apoi, se reia algoritmul, pornind de la a doua poziţie şi se caută minimul
între elementele a2, ..., an. Acesta se inter-schimbă cu al doilea dacă este cazul.
Procedeul se continuă până la ultimul element. Pseudocodul algoritmului de
sortare prin selecţia minimului este:

Subalgoritm Selecţie(n,a)
1: pentru i=1, n-1 execută:
2: min = a[i]
3: pentru j=i+1, n execută:
4: dacă min > a[j] atunci
5: min = a[j]
6: k = j Sfd 4: Sfp 3:
7: dacă min <> a[i] atunci
8: aux = a[i]
9: a[i] = a[k]
10: a[k] = aux Sfd 7: Sfp 1:

Exemplu: Fie tabloul A = (5, 0, 8, 7, 3).

Element Poziţia Noul tablou


Pas Tabloul A minim minimului A
i=1 (5, 0, 8, 7, 3) 0 2 (0, 5, 8, 7, 3)
i=2 (0, 5, 8, 7, 3) 3 5 (0, 3, 8, 7, 5)
i=3 (0, 3, 8, 7, 5) 5 5 (0, 3, 5, 7, 8)
i=4 (0, 3, 5, 7, 8) 7 4
Algoritmul se poate scrie şi prin determinarea valorilor maxime şi mutarea lor în
tablou de la dreapta la stânga, astfel rezultând, de asemenea, un şir ordonat
crescător. Un astfel de algoritm este des utilizat pentru că este mai simplu de
reţinut, în forma următoare:

Subalgoritm Selecţie(n,a)
1: pentru i=1, n-1 execută:
2: pentru j=i+1, n execută:
3: dacă a[i] > a[j] atunci
4: aux = a[i]
5: a[i] = a[j]
6: a[j] = aux sfd 3: sfp 2: sfp 1:

Complexitatea algoritmului: Pentru acest algoritm de sortare nu putem spune


că există caz favorabil, nefavorabil sau mediu, deoarece numărul de paşi efectuaţi
este n(n-1)/2 indiferent de structura datelor de intrare. Aşadar, ordinul de
complexitate este Θ(n2). Numărul de comparări este tot n(n-1)/2, însă pentru cazul
în care şirul este ordonat crescător se vor face doar n atribuiri (se execută doar
instrucţiunea de atribuire 2:)

Se dă un tablou de n numere întregi. Se cere de ordonat elementele tabloului


în ordine crescătoare, utilizînd metoda selecţiei.

Program Pascal:
program metoda_selectiei;
uses crt;
var a:array[1..50] of integer;
n,i,j,min,t,k:integer;
Begin
clrscr;
write('Introdu dimensiunea tabloului A , n= ');
readln(n);
for i:=1 to n do
begin
write('a[',i,']= ');
readln(a[i]);
end;
writeln;
writeln('Tabloul A :');
for i:=1 to n do
write(a[i]:4);
writeln;
for i:=1 to n-1 do begin
min:=a[i];
t:=i;
for j:=i+1 to n do begin
if a[j]<min then
begin
min:=a[j];
t:=j;
end;
k:=a[i];
a[i]:=a[t];
a[t]:=k;
end;end;
writeln('Tabloul A crescator :');
for i:=1 to n do
write(a[i]:4);
readkey; end.

S-ar putea să vă placă și