Sunteți pe pagina 1din 9

Algoritmi si structuri de date

VII. Sortarea
1. Generalitati
2. Sortarea prin numararea comparatiilor
3. Sortarea prin insertie
4. Sortarea prin interschimbare
5. Sortarea prin interclasare

Intocmit pe baza: S. Barza, L. M. Morogan, Structuri de date, EFRM,


2007, Cap VII, p. 112-119
1. Generalitati
Sortarea – procesul prin care valorile dintr-o structura liniara de date sunt ordonate
conform unei relatii de ordine specificata.
Cheie de sortare
- simpla
- multipla
Locul memorarii datelor =>
- sortare interne
- sortare externa
Dimensiunea spatiului de memorie pt rezultat =>
- sortarea in spatiul initial de valori
- folosirea unui spatiu suplimentar
Pp. – ordonari dupa cheie simpla
- elementele structurilor = valoarea cheii
2. Sortarea prin numararea comparatiilor
Pentru fiecare element xi, i = 1, 2, ...., n, se numara cate elemente mai mici sau
egale cu n exista in x. => spatiu suplimentar pt memorarea a n valori intregi
y – vectorul in care se obtine rezultatul ordonarii lui x
p – vectorul rezultat in urma numararii
y(p(i)) = x(i)

Sortarea interna:
pentru i de la 1 la n
p(i) = 1
pentru i de la 2 la n /* O(n2/2) */
pentru j de la 1 la i – 1 /* i – 1 comparatii */
daca x(i) ≤ x(j)
atunci p(j) = p(j) + 1
altfel p(i) = p(i) + 1
pentru i de la 1 la n ` /* O(n) */
y(p(i)) = x(i)
2. Sortarea prin numararea comparatiilor
Sortarea externa (x, p - memorate extern, in fisiere cu acces direct):
pentru i de la 1 la n
scrie(pi, 1)
pentru i de la 2 la n
citeste(xi, y)
pentru j de la 1 la i – 1
citeste(xj, z)
daca y ≤ z
atunci citeste(pj, q), scrie(pj, q + 1)
altfel citeste(pi, q), scrie(pi, q + 1)
pentru i de la 1 la n `
citeste(pi, q), citeste(xi, z), scrie(yq, z)

Obs. 1 comparatie => 3 I/O


Nr total operatii de transfer: n + [n – 1 +3n(n – 1)/2] + 3n = 3n2/2 + 7n/2 – 1

O(3n2/2 )
3. Sortarea prin insertie
Sortare prin insertie directa
pentru i de la 2 la n
a = xi, k = i – 1
cat timp k > 0 si xk > a
xk+1 = xk, k = k – 1
xk+1 = a

Cazul cel mai nefavorabil (x ordonat descrescator): n(n – 1)/2 comparatii si 3


operatii de acces la vectorul x pt fiecare comparatie

Daca x uniform distribuit => nr mediu de comparatii = ((n – 1) + n(n – 1)/2)/2 =>
complexitate de comparare O(n2/4)

=> algoritmul nu se preteaza la o aplicare in cazul sortarii externe


3. Sortarea prin insertie
Sortare prin insertie binara: decalare globala, in momentul determinarii locului in
care xi trebuie inserat in {x1, x2, ..., xi-1}
pentru i de la 2 la n
a = xi, caut(x, i – 1, a, p)
pentru j de la i – 1 la p pas -1
xj+1 = xj
xp = a

caut(x, i – 1, a, p) – procedura de cautare binara


p – indicele unui element cu valoare a sau isup daca a nu a fost gasit

Nr accese la x nu se modifica fata de sortarea prin insertie directa.

Nr comparatii: log22 + log23 + ... + log2n < nlog2n =>


=> complexitatea (de comparatie) O(nlog2n)
4. Sortarea prin interschimbare
Principiul: se compara intre ele doua elemente consecutive si se schimba intre ele
daca e cazul.
d=n
cat timp d > 1
p=0
pentru i de la 1 la d – 1
daca vi > vi+1
vi ↔ vi+1, p = i
d=p

Cazul cel mai favorabil => n – 1 comparatii.


Cazul cel mai nefavorabil => (n – 1) + (n – 2) + ... + 1 = n(n - 1)/2 comparatii
Complexitate O(n2/4)
5. Sortarea prin interclasare
Principiul: din vectorul dat se formeaza doi sau mai multi vectori ordonati si prin
interclasarea acestora se obtine vectorul ordonat final.
sortinterclasare
daca lf – li ≤ 0
atunci continua
altfel
k = [(li + lf)/2]
sortinterclasare(v, li, k)
sortinterclasare(v, k + 1, lf)
interclasare(v, li, k, lf, z)
muta(z, v, li, lf)

sortinterclasare(v, 1, n)

interclasare(v, li, k, lf, z) – interclasarea a doi vectori memorati in acelasi vector,


rezultatul depus in z
muta(z, v, li, lf) – mutarea valorilor lui z in v, pt indicii dintre li si lf

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