Metode de Sortare
Metode de Sortare
In cazul unui vector sortat elementul cu indice i este succesorul celor cu indici de la 0 la i-1 si
predecesorul celor cu indici de la i+1 la n-1.
Sortarea prin selectie
Sa consideram un vector in care elementele cu indici de la 0 la i-1 sunt deja sortate. Pentru a continua
procesul de sortare, dintre elementele ramase (cu indici de la i pana la n-1) trebuie gasit predecesorul
tuturor celorlalte (cu indice ipg) si adus in pozitia i.
i-1
...
ipg
.. ..
elemente sortate
n-1
.. ..
elemente nesortate
10
3
3
3
3
3
3
5
5
5
5
5
5
5
Vectorul prelucrat
6 12 3
7
6 12 10 7
6 12 10 7
6 12 10 7
6
7 10 12
6
7
9 12
6
7
9 10
12 9
12 9
12 9
12 9
12 9
12 10
12 12
ipg
4
1
2
5
7
7
6
In acest exemplu elementul selectat dintr-o secventa este marcat prin hasurare, iar locul in care trebuie
plasat acesta este marcat prin chenar dublu.
...
predecesori aux
... ...
...
succesori aux se
deplaseaza la dreapta
aux
i
1
2
3
4
5
6
7
8
Vectorul prelucrat
10 5
6 12 3
7 12 9
5 10 6 12 3
7 12 9
5
6 10 12 3
7 12 9
5
6 10 12 3
7 12 9
3
5
6 10 12 7 12 9
3
5
6
7 10 12 12 9
3
5
6
7 10 12 12 9
3
5
6
7
9 10 12 12
In acest exemplu elementul care trebuie inserat intr-o secventa deja sortata este marcat cu un chenar
dublu, iar succesorii sai, care trebuie deplasati spre dreapta, sunt marcati prin hasurare.
1
0
ip
0
1
2
3
4
5
0
1
2
3
0
1
2
0
Vectorul prelucrat
10 5
6 12 3
7
5 10 6 12 3
7
5
6 10 12 3
7
5
6 10 12 3
7
5
6 10 3 12 7
5
6 10 3
7 12
5
6 10 3
7 12
5
6 10 3
7 12
5
6 10 3
7 12
5
6
3 10 7 12
5
6
3
7 10 12
5
6
3
7 10 12
5
3
6
7 10 12
5
3
6
7 10 12
3
5
6
7 10 12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
u_inv
0
1
1
3
4
4
0
0
2
3
0
1
1
0
Fiecare pereche analizata este evidentiata printr-un chenar dublu, hasurat in cazul in care elementele
trebuie interschimbate. Limita fiecarei etape de verificare este marcata prin linie dubla mai groasa.
rezultat interclasare
| 15, 18 | 3, 8, 11 |
=>
| 3, 8, 11, 15, 18 |
| 2, 5 | 5, 14 |
=>
| 2, 5, 5, 14 |
observam ca un subvector poate fi predecesorul celuilalt (ultimul element dintr-un subvector este
predecesorul primului element din celalalt). In astfel de cazuri interclasarea poate fi inlocuita prin
copierea celor doi subvectori, in ordine inversa (primul exemplu) sau pastrand ordinea existenta (al
doilea exemplu).
Vectorul prelucrat
6 12 3 7 12
6 12
sursa, rez
9
6 12
10 12
3
3
7
7
12
3
9
12 9
9 12
7 9 12
10 12 12
Faza
w , v
v , w
lung. subvectori
8
4
divizare
divizare
w , v
tratare pereche
w
v
v
w
v
w
w
v
2
4
4
2
tratare pereche
fuziune
divizare
tratare pereche
w , v
tratare pereche
v , w
w , v
4
8
fuziune
fuziune
,
,
,
,
In acest exemplu frontierele subvectorilor sunt marcate cu linie dubla, iar subvectorii care implica
interschimbare sau interclasare sunt evidentiati prin hasurare.
Algoritmul MergeSort ( v, n)
creeaza w - copia vectorului v
MSort (n, w, v) - sorteaza cele n elemente din w, obtinand rezultatul in v
elibereaza spatiul ocupat de w
Algoritmul MSortI ( v, n)
aloca spatiu pentru w;
sorteaza perechile de elemente din v in w;
k = 2; sursa = w si rez = v;
cat timp k < n
interclaseaza in rez perechi de subvectori sursa de lungime k (ultimul subvector
poate avea lungime < k);
inverseaza sursa si rez;
dubleaza k;
daca rez este w atunci copiaza w in v
elibereaza spatiul ocupat de w
6
6
3
3
v , w
w , v
2 x 5 , 1
5
3
3
10 12 3 7 12 15 3 4 9
6 7 10 12 12 15 3 4 9
4 5 6 7 9 10 12 12 15
v , w
w , v
v , w
4 x 2 , 3
8 x 1 , 3
11
4
9
Lungimi subvectori
10 5
5 10
6
5
3
9
4
sursa, rez