Sunteți pe pagina 1din 4

Sortare rapida (QuickSort) <andys>

Secventa de comparatie din metoda lui Batcher este predeterminata; de fiecare data se compara
aceleasi perechi de chei, indiferent de rezultatele comparatiilor anterioare.
Sortarea rapida, in schimb, foloseste rezultatele fiecarei comparatii pentru a stabilii care sunt
cheile care urmeaza a fi comparate.
Deci, se foloseste urmatoare schema: se utilizeaza doi indicatori i si j, cu i=1 si j=N. Se compara
i cu j si daca nu este necesar interschimbul, se micsoreaza j cu 1, repetandu!se procesul. Daca
apare un interschimb, se mareste i cu 1si se continua compararea marind i pana la aparitia unui
interschimb. "poi, se micsoreaza din nou j, continuandu!se in acelasi mod, pana cand i=j.
#$emplu:
Numerele: 503 %&' (1) %*1 +%& 1'% &+' )'( *(, -)* 1(- (%+ *1) *'' '*( 703
Descreste j
.nterschimb 1: 154 %&' (1) %*1 +%& 1'% &+' )'( *(, -)* 503 (%+ *1) *'' '*( '%,
/areste i
.nterschimb ): 1(- %&' 503 %*1 +%& 1'% &+' )'( *(, -)* 512 (%+ *1) *'' '*( '%,
Descreste j
.nterschimb ,: 1(- %&' 426 %*1 +%& 1'% &+' )'( *(, 503 (1) (%+ *1) *'' '*( '%,
/areste i
.nterschimb -: 1(- %&' -)* %*1 503 1'% &+' )'( *(, 908 (1) (%+ *1) *'' '*( '%,
Descreste j
.nterschimb (: 1(- %&' -)* %*1 275 1'% &+' 503 *(, +%& (1) (%+ *1) *'' '*( '%,
/areste i
.nterschimb *: 1(- %&' -)* %*1 )'( 1'% 503 897 *(, +%& (1) (%+ *1) *'' '*( '%,
Descreste j
0iecare comparatie din e$emplu, a implicat cheia (%,; in 1eneral, fiecare comparatie va implica
valoarea ori1inala a cheii 1, deoarece ea va fi modificata odata cu fiecare schimbare de
directie..n momentul cand i=j, inre1istrarea ori1inala 21, va fi plasata in pozitia finala, deoarece
se poate vedea ca nu vor e$ista chei mai mari la stan1a sa si nici mai mici la dreapta sa.
.nre1istrarile vor fi impartite intr!o asemenea maniera, incat problema initiala este redusa la doua
probleme mai simple: sortarea 2i ! 2i!1 si sortarea 2i31 ! 2N. Se poate aplica aceasi tehnica
fiecarei dintre aceste doua multimi de inre1istrari.
4entru a tine minte multimile de elemente care sunt impartite, se foloseste o stiva. "lt e$emplu,
care arata modul in care sunt sortate inre1istrarile prin acesta metoda, este dat in tabelul de mai
jos. 4arantezele, indica inre1istrarile care mai trebui sortate; inre1istrarile impartite in 1rupe sunt
reprezentate prin doua variabile l si r, care reprezinta limitele inre1istrarilor care sunt curent
e$aminate.
Stiva 5l,r6
7(%, %&' (1) %*1 +%& 1'% &+' )'( *(, -)* 1(- (%+ *1) *'' '*( '%,8 51,1*6 !
71(- %&' -)* %*1 )'( 1'%8 (%, 7&+' *(, +%& (1) (%+ *1) *'' '*( '%,8 51,*6 5&,1*6
7%*1 %&'8 1(- 7-)* )'( 1'%8 (%, 7&+' *(, +%& (1) (%+ *1) *'' '*( '%,8 51,)6 5-,*6 5&,1*6
%*1 %&' 1(- -)* )'( 1'% (%, 7&+' *(, +%& (1) (%+ *1) *'' '*( '%,8 5-,*6 5&,1*6
%*1 %&' 1(- 1'% )'( -)* (%, 7&+' *(, +%& (1) (%+ *1) *'' '*( '%,8 5-,(6 5&,1*6
%*1 %&' 1(- 1'% )'( -)* (%, 7&+' *(, +%& (1) (%+ *1) *'' '*( '%,8 5&,1*6 !
%*1 %&' 1(- 1'% )'( -)* (%, '%, *(, '*( (1) (%+ *1) *'' &+' +%& 5&,1-6 !
%*1 %&' 1(- 1'% )'( -)* (%, *'' *(, *1) (1) (%+ '%, '*( &+' +%& 5&,1)6 !
%*1 %&' 1(- 1'% )'( -)* (%, (%+ *(, *1) (1) *'' '%, '*( &+' +%& 5&,116 !
%*1 %&' 1(- 1'% )'( -)* (%, (%+ *(, *1) (1) *'' '%, '*( &+' +%& 5+,116 !
%*1 %&' 1(- 1'% )'( -)* (%, (%+ (1) *1) *(, *'' '%, '*( &+' +%& 5+,1%6 !
%*1 %&' 1(- 1'% )'( -)* (%, (%+ (1) *1) *(, *'' '%, '*( &+' +%& ! !
"ceata metoda de sortare, a fost numita sortare prin interschimb de partitii; ea a fost propusa de
9. ". 2. :oare. :oare, si!a denumit metoda ;sortare rapida;. .ntre1ul proces de sortare, necesita
doar -& de comparatii, fiind intrecuta la numarul de comparatii doar de sortarea prin insertie
binara, care are un numar de -' de comparatii. Si numarul de interschimbari este destul de mic,
ea necesitand doar 1' interschimbari.
Algoritml!
.nre1istrarile 21, ..., 2N sunt rearanjate pe loc; dupa terminarea sortarii, cheile lor vor fi in ordine
1, ..., N. 4entru memorarea temporara, este necesara o stiva cu cel mult lo1)N intrari.
1. Se presupune prezenta cheilor artificiale %=! si N31=3 , astfel incat, % i
N31 pentru 1 i N. 5e1alitatea este permisa6.
). Sub1rupele de inre1istrari ale lui /, sau un numar redus de inre1istrari, sunt sortate prin
insertie directa, unde / 1 este un parametru care trebuie ales dupa cum se descrie mai
jos.
,. 4e durata unei etape particulare, sunt efectuate una sau doua comparatii suplimentare
5permitand indicatorilor i si j sa se intersecteze6.
-. .nre1istrarile cu chei e1ale, sunt interschimbate, desi nu este strict necesar 5.dea este
datorata lui 2. 9. Sin1leton, si ajuta la sectionarea 1rupurilor de inre1istrari pe jumatate,
atunci cand sunt un numar e1al de elemente6.

1. [Initializeaza.] Stabileste stiva vida si l=1, r=N
). [Incepe o noua etapa.] (Se doreste sortarea grupurilor de inregistrari Rl ...Rr). Daca r
1!", #ergi la pasul $. In caz contrar, stabileste i=l, %=r, &=&l, R=Rl.
,. ['o#para &(&%.]Daca &!&%, #icsoreaza % cu 1 si repeta acest pas.
-. [)rans*er la Ri.] (+a acest pas, &i este o c,eie nese#ni*icativa &, si & &%.) Daca % i,
stabileste Ri=R si #ergi la pasul -. .lt*el, Ri=R% #areste i cu 1.
(. ['o#para &i(&.] Daca &i!&, #areste i cu 1 si repeta acest pas.
*. [)rans*er la R%.] (+a acest pas, &% este o c,eie nese#ni*icativa &, si& &i). Daca % i,
stabileste R%=R si i=%. .lt*el, R%=Ri, #icsoreaza % cu 1 si #ergi la pasul /.
'. [0une in stiva.] (.cu#, grupa de inregistrari, Rl...Ri...Rr a *ost partitionata ast*el incat
&1 &i pentru l 1 i si &i &1 pentru i 1 r.) Daca ri il, plaseaza (i21,r) in var*ul
stivei si stabileste r=i1. In caz contrar, plaseaza (l,i1) in var*ul stivei si stabileste l=i21.
(3iecare intrare (a,b) in stiva, reprezinta o cerere de sortare a grupului de inregistrari
Ra...Rb la un anu#it ti#p, in viitor). .cu#, #ergi inapoi la pasul 4.
&. [Sortare prin insertie directa.] pentru %=l21 la r1, e*ectueaza ur#atoarele operatii(
stabileste &=&%, R=R%, i=%15 apoi, stabileste Ri21=Ri, i=i1, de zero sau #ai #ulte ori,
pana cand &i=&5 apoi stabileste Ri21=R. (.cesta, este in esenta algorit#ul de sortare
prin insertie directa, aplicat grupului de inregistrari *or#ate din " sau #ai putine
ele#ente.)
+. [.nuleaza stiva.] Daca stiva este vida, sortarea sa e*ectuat5 in caz contrar, inlatura
intrarea ei din var* (l6,r6), stabileste l=l6, r=r6 si revino la pasul 4.
Algoritml repre"entat prin s#$eme logi#e!