Sunteți pe pagina 1din 22

MergeSort

(Sortarea prin inter-clasare)


Abrudan Bogdan

2
MergeSort
n informatic, merge sort este un exemplu de
algoritm de tip divide et impera ,inventat
de John von Neumann n 1945.
3
MergeSort Algorithm
-se imparte vectorul in secvente din ce in ce mai
mici, astfel incat fiecare secventa sa fie ordonata
la un moment dat si interclasata cu o alta
secventa din vector corespunzatoare.
-practic interclasarea va incepe cand se ajunge
la o secventa formata din doua elemente.
Aceasta odata ordonata se va interclasa cu o
alta corespunzatoare. Cele doua secvente vor
alcatui in subsir ordonat din vector mai mare
care la randul lui se va interclasa cu subsirul
corespunzator samd.
4
Cum MERGE (functioneaza) ?
Avem aici doua liste pe care vrem sa le sortam:
Prima lista: (12, 16, 17, 20, 21, 27)
A doua lista: (9, 10, 11, 12, 19)
Comparam 12 si 9
Prima lista: (12, 16, 17, 20, 21, 27)
A doua lista : (10, 11, 12, 19)
Elementul selectat: (9)
Comparam 12 si 10
Prima lista: (12, 16, 17, 20, 21, 27)
A doua lista : (11, 12, 19)
Elementele slectate: (9, 10)
5
Cum MERGE ?
Comparam 12 si 11
Prima lista : (12, 16, 17, 20, 21, 27)
A doua lista : (12, 19)
Elementele slectate: (9, 10, 11)
Comparam 12 si 12
Prima lista : (16, 17, 20, 21, 27)
A doua lista : (12, 19)
Elementele slectate: (9, 10, 11, 12)
6
Cum MERGE ?
Compare 16 and 12
Prima lista : (16, 17, 20, 21, 27)
A doua lista : (19)
Elementele slectate: (9, 10, 11, 12, 12)
Compare 16 and 19
Prima lista : (17, 20, 21, 27)
A doua lista : (19)
Elementele slectate: (9, 10, 11, 12, 12, 16)
7
Cum MERGE ?
Compare 17 and 19
Prima lista : (20, 21, 27)
A doua lista : (19)
Elementele slectate : (9, 10, 11, 12, 12, 16, 17)

Compare 20 and 19
Prima lista : (20, 21, 27)
A doua lista : ( )
Elementele slectate: (9, 10, 11, 12, 12, 16, 17, 19)
8
Cum MERGE ?
Verificam 20 cu lista goala
First: ( )
Second: ( )
New: (9, 10, 11, 12, 12, 16, 17, 19, 20, 21, 27)
9
MergeSort intr-un tabel
Original 24 13 26 1 12 27 38 15
Divide in 2 24 13 26 1 12 27 38 15
Divide in 4 24 13 26 1 12 27 38 15
Divide in 8 24 13 26 1 12 27 38 15
Merge 2 13 24 1 26 12 27 15 38
Merge 4 1 13 24 26 12 15 27 38
Merge 8 1 12 13 15 24 26 27 38
10
Copacul Merge-Sort

7 2 9 4 2 4 7 9
7 2 2 7 9 4 4 9
7 7 2 2 9 9 4 4
11
Cum a fost plantat acel copac ?
De data aceasta va fi un exemplu la o scara mai mare
Vectorul initial 72943861 este impartit in 2 segmente
7 2 9 4 3 8 6 1
12
Pentru prima segventa se procedeaza astfel
7 2 9 4
7 2 9 4 3 8 6 1
13
Dupa o noua impartire se obtine
7 2 9 4
7 2

7 2 9 4 3 8 6 1
14
Se incepe interclasarea. Se considera ca
avem doi vectori de lungime 1 care se
interclaseaza:
7 2 9 4
7 2
7 7
7 2 9 4 3 8 6 1
15
Se incepe interclasarea. Se considera ca
avem doi vectori de lungime 1 care se
interclaseaza:

7 2 9 4
7 2
7 7 2 2
7 2 9 4 3 8 6 1
16
Rezulta 2 7
7 2 9 4
7 2 2 7
7 7 2 2
7 2 9 4 3 8 6 1
17
La fel si pentru secventa 9 4
7 2 9 4
7 2 2 7 9 4 4 9
7 7 2 2
7 2 9 4 3 8 6 1
9 9 4 4
18
Se considera ca avem iar doi vectori de
lungime 1 care se interclaseaza:
7 2 9 4 2 4 7 9
7 2 2 7 9 4 4 9
7 7 2 2 9 9 4 4
7 2 9 4 3 8 6 1
19
Se procedeaza la fel si cu secventa 3 8 6 1
7 2 9 4 2 4 7 9 3 8 6 1 1 3 6 8
7 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6
7 7 2 2 9 9 4 4 3 3 8 8 6 6 1 1
7 2 9 4 3 8 6 1
20
7 2 9 4 2 4 7 9 3 8 6 1 1 3 6 8
7 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6
7 7 2 2 9 9 4 4 3 3 8 8 6 6 1 1
7 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9
Cele doua secvente se interclaseaza din nou
obtinand:
21
Complexity of MergeSort
Pass
Number
Number of
merges
Merge list
length
# of comps /
moves per
merge
1 2
k-1
sau n/2 1 sau n/2
k
2
1
2 2
k-2
sau n/4 2 sau n/2
k-1
2
2
3 2
k-3
sau
n/8 4 sau n/2
k-2
2
3
. . . .
. . . .
. . . .
k 1 2
1
sau n/2
k-1
2
k-2
sau n/4 2
k-1
k 2
0
sau n/2
k
2
k-1
sau n/2 2
k

k = log n
22
Multiplying the number of merges by the maximum
number of comparisons per merge, we get:
(2
k-1
)2
1
= 2
k
(2
k-2
)2
2
= 2
k



(2
1
)2
k-1
= 2
k
(2
0
)2
k
= 2
k
Complexity of MergeSort
k passes each require
2
k
comparisons (and
moves). But k = lg n
and hence, we get
lg(n) n comparisons
or O(n lgn)

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