Sortare rapida(quicksort)
Un tablou V se completeaza cu n elemente numere reale .Sa se ordoneze crescator folosind metoda de sortare rapida .
Solutia problemei se bazeaza pe urmatoarele etape implementate in programul principal:
4se apeleaza procedura “quick” cu limita inferioara li=1 si limita superioara ls=n;
4functia”poz” realizeaza mutarea elementului v[i] exact pe pozitia ce o va ocupa acesta in vectorul final ordonat ; functia”poz” intoarce (in k ) pozitia ocupata de acest element;
4in acest fel ,vectorul V se imparte in doua parti : li …k-1 si k+1…ls;
4pentru fiecare din aceste parti se reapeleaza procedura“quick”,cu limitele modificate corespunzator ;
4in acest fel ,primul element din fiecare parte va fi pozitionat exact pe pozitia finala ce o va ocupa in vectorul final ordonat (functia“poz”);
4fiecare din cele doua parti va fi ,astfel ,inpartita in alte doua parti ;procesul continua pana cand limitele partilor ajung sa se suprapuna ,ceea ce indica ca toate elementele vectorului au fost mutate exact pe pozitiile ce le vor ocupa in vectorul final ;deci vectorul este ordonat ;
4in acest moment se produc intoarcerile din apelurile recursive si programul isi termina executia .
program quicksort;
type vector= array [1..50] of real ;
var v:vector;
i,n,k:integer;
function poz(li,ls:integer):integer;
var i,j,modi,modj,m:integer;
man:real;
begin
i:=li; j:=ls;
modi:=0; modj:=-1;
while i<j do
begin
if v[i]>v[j] then
begin
man:=v[i];
v[i]:=v[j];
v[j]:=man;
m:=modi ;
modi:=-modj;
modj:=-m;
end;
i:=i+modi;
j:=j+modj;
end;
poz:=i;
end;
procedure quick(li,ls:integer);
begin
if li<ls then begin
k::=poz(li,ls); 53528cnz87yej8u
quick(li,k-1);
quick(k+1,ls);
end;
end;
begin
write(‘cate elemente are vectorul ?=’);readln(n);
for i:=1 to n do
begin
write(‘tastati elementul ‘,i,’=’);
readln(v[i]);
end;
quick(1,n);
writeln(‘vectorul ordonat este :’);
for i:=1 to n do writeln(v[i]);
readln;
end.
OBSERVATIE
4daca elementul se afla in stanga ,atunci se compara cu elementele din dreapta lui si se sar (j:=j-1)elementele mai mari decat el ;
4daca elementul se afla in dreapta ,atunci se compara cu elemente din stanga lui si se sar (i:=i+1)elementele mai mici decat el.