Sunteți pe pagina 1din 17

SORTAREA

RAPID

SORTAREA RAPID
Sortarea rapid este un algoritm de sortare care, pentru
un ir de n elemente, are:

un timp de execuie (n), n cazul cel mai defavorabil.


un timp de executie (n log n), n cazul mediu, constanta
ascuns n formul fiind destul de mic.
Avantaj: Algoritmul sorteaz pe loc (n spaiul alocat
irului de intrare) i lucreaz foarte bine chiar i ntr-un
mediu de memorie virtual.

Descrierea sortrii rapide


Algoritmul de sortare rapid, ca i algoritmul de sortare prin
interclasare, se bazeaz pe paradigma divide i stpnete.
Pentru un subir A[pr] sunt prezentai urmtorii trei pai:
Divide: irul A[pr] este mprit n dou subiruri nevide
A[pq] i A[q+1r] , astfel nct fiecare element al subirului
A[pq] s fie mai mic sau egal dect orice element al
subirului A[q+1r] .
Stpnete: Cele doua subiruri A[pr] i A[pr] sunt sortate
prin apeluri recursive ale algoritmului de sortare rapid.
Combin: Deoarece cele dou subiruri sunt sortate pe loc, nu
este nevoie de nicio combinare, irul iniial fiind ordonat.

Descrierea algoritmului:
Quicksort(A,p,r)
1: Dac p<r atunci
2: qPartiie(A,p,r)
3: Quicksort(A,p,q)
4: Quicksort(A,q+1,r)

Partiionarea irului
Partiie(A,p,r)
1: x A [p]
2: i p - 1
3: j r + 1
4: ct timp i<j execut
5: repet
6:
j j 1
7: pn cnd A[ j ] x
8: repet
9:
i i + 1
10: pn cnd A [ i ] x
11:
dac i < j atunci
12:
interschimb A [ i ] A [ j ]
13: altfel
14:
returneaz j
15: sfrit ct timp

i
5

i
3

(a)
6

(d)

j
6

j
7

(b)
2

(c)
7

j
3

(e)

Performana algoritmului de sortare


Timpul

de execuie depinde de faptul c


partiionarea este sau nu echilibrat.

Partiionare

Echilibrat
=> algoritmul
asimptotic e la fel de rapid ca i sortarea prin
interclasare.
Partiionare Dezchilibrat => algoritmul se
execut la fel de ncet ca i sortarea prin
inserare.

Partiionarea in cazul cel mai defavorabil

Apare
n situaia

n care procedura de partiionare


produce un vector de n-1 elemente i unul de 1
element. ( partiionare dezechilibrat).
Dac apare la fiecare pas al algoritmului, formula
recursiv pentru timpul de execuie va fi:
T(n) = T(n-1) + (n) = = ( ) = ()
Deci timpul de execuie nu este mai bun dect al
algoritmului de inserare.Mai mult, cnd vectorul
este ordonat, timpul de execuie va rmne ()

Arbore de recuren cazul cel mai


defavorabil
n

n
1

n -n1
1

n-1
n - 21

.
.

n2
n

n-3
.
..

3
2
()

2
1

Partiionarea in cazul cel mai favorabil


Algoritmul

lucreaz mult mai repede dac


partiionarea produce 2 vectori de n/2
elemente.
Formula de recuren este:
T(n) = 2 T(n/2) + (n) = (n lg n)
Deci dac partiionarea este cea mai bun,
atunci produce un algoritm de sortare mult mai
rapid.

Arbore de recuren cazul cel mai


favorabil

lg n

n
n/2
n/4
n/8

n/4
n/8

n/2

n/8

n/4
n/8

n/8

n/4
n/8

n/8

n/8

..... ...
. .....
.....
.....
.....
.....
.....
. . ..
.
.
..... .... .....
..... .....
.....
.....
.....
. ..
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 11 1 1
n
( n lg n)

Partiionarea echilibrat
O

mprire in proporie de 9 la 1, pare a fi o


partiionare dezechilibrat. n cazul acesta
formula recursiv pentru timpul de execuie este:
T(n) = T(9n/10) + T(n/10) + n
La fiecare nivel al partiionrii are un timp de
execuie de (n lg n), adic este la fel ca n cazul
partiionrii n 2 pri egale.
Deci timpul de execuie este (n lg n) la orice
partiionare ntr-o proporie constant.

Arbore de recuren pri n proporie de


9 la 1

1/10 n

1/100 n

.. .. ..
.. ..
..
. . ..
. . ..
..
.... .... ....

9/10 n

9/100 n

.. .. .. ..

9/100 n

81/100 n

81/1000 n

n
n

729/1000
n

..
. . ..
. . . .... .... . . . . . . . . . . . . . . .
.........1
(n lg n )

Comportarea medie
Toate

permutrile elementelor de intrare sunt


la fel de probabile.
n situaia n care algoritmul de sortare rapid
lucreaz pe o intrare aleatoare, probabil nu va
partiiona la fel la fiecare nivel.
Unele partiionri vor fi echilibrate, altele nu.
Partiionrile bune corespund celui mai bun
caz, iar cele rele celui mai defavorabil caz.

Variantele aleatoare ale sortrii rapide


n

n-1

(n -1)/2 + 1

(n-1)/2

(n 1)/2

(n-1)/2
a)

b)

partiionare defavorabil de un cost (n) poate


fi absorbit de una bun, tot de un cost (n) i
rezult o partiionare favorabil.
Timpul de execuie al algoritmului de sortare
rapid, cnd partiionrile bune i rele alterneaz,
este acelai ca n cazul partiionrilor bune, adic:
O(n lg n), doar constanta din notaie O este mai
mare.
n

concluzie, quick sort-ul este unul dintre cei mai


buni algoritmi de sortare.

V mulumim!
INFORMATIC,
GRUPA
7221
ALGORITMICA
GRAFURILOR
PROFESOR: CIUREA ELEONOR
HORVAT ANDREEA
ISTOK ANDREA

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