๋ณํฉ ์ ๋ ฌ(Merge Sort)๋?
๋ณํฉ์ ๋ ฌ์ ์์ ์ค๋ช
ํ ์ ํ ์ ๋ ฌ
, ๋ฒ๋ธ ์ ๋ ฌ
, ์ฝ์
์ ๋ ฌ
๊ณผ๋ ๋น๊ต ํ ์ ์๋ ์๊ฐ ๋ณต์ก๋์ธ O(n log n)์ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
ํ๋์ ์ปดํจํฐ ๊ฐ๋
์ ์์ด๊ฐ ๋์๋ค ํฐ ๋
ธ์ด๋ง(John von Neumann)์ด ์ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ
์ค ํ๋์ด๋ค.
์ฌ๊ท ํธ์ถ์ ์ฌ์ฉํ์ฌ ์ ๋ ฌ์ ํจ์จ์ ๊ทน๋ํ ์์ผฐ๋ค.
๊ณผ์
-
์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด์ ์ ๋ฐ์ผ๋ก ์๋ผ ๋น์ทํ ํฌ๊ธฐ์ ๋ ๋ถ๋ถ์ ๋ฐฐ์ด์ผ๋ก ๋๋๋ค.
-
๊ฐ ๋ถ๋ถ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ 0์ด ๋ ๋ ๊น์ง ๋ฐ๋ณตํ๊ณ 0์ด ๋๋ฉด ๊ฐ ๋ถ๋ถ์ ์ฌ๊ท์ ์ผ๋ก ํฉ์น๋ ๊ณผ์ ์ ์ํํ๋ค.
-
ํฉ์น๋ ๊ณผ์ ์ด ์ํ๋ ๋ ์ค์ง์ ์ ๋ ฌ์ด ์ด๋ฃจ์ด์ง๋ค.
์ด๋ฐ์์ผ๋ก ์งํํ๋ฉด ๋จ๊ณ๋ฅผ ์ธ ๋จ๊ณ๋ก ๋๋ ์ ์๋ค.
1. ๋ถํ
: ์
๋ ฅ ๋ฐฐ์ด์ ๊ฐ์ ํฌ๊ธฐ์ 2 ๊ฐ์ ๋ถ๋ถ ๋ฐฐ์ด๋ก ๋ถํ ํ๋ค.
2. ์ ๋ณต
: ๋ถ๋ถ ๋ฐฐ์ด์ ์ ๋ฆฌํ๋ค. ๋ถ๋ถ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ์ถฉ๋ถํ ์์ง ์์ผ๋ฉด ์ฌ๊ท ํธ์ถ์ ์ด์ฉํด ๋ค์ ๋ถํ
์ํ์ค๋ฅผ ์์ํ๋ค.
3. ๊ฒฐํฉ
: ์ ๋ ฌ๋ ๋ถ๋ถ ๋ฐฐ์ด์ ํ๋์ ๋ฐฐ์ด์ ๊ฒฐํฉ์ํจ๋ค.
pseudo code
mergeSort(A[], p, r){
if(p<r) then { .... 1
q <- (p+r) / 2; .... 2
mergeSort(A, p, q); .... 3
mergeSort(A, q+1, r); .... 4
merge(A, p, q, r); .... 5
}
}
merge(A[], p, q, r){ .... 6
์ ๋ ฌ๋์ด ์๋ ๋ ๋ฐฐ์ด A[p...q] ์ A[q+1...r]์ ํฉ์ณ .... 7
์ ๋ ฌ๋ ํ๋์ ๋ฐฐ์ด A[p...r]์ ๋ง๋ ๋ค. .... 8
}
์ด์ค merge๋ฅผ ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ๊ธฐ์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
// A[p...q]์ A[q+1...r]์ ๋ณํฉํด์ A[p...r]์ ์ ๋ ฌ๋ ์ํ๋ก ๋ง๋ ๋ค.
// A[p...q]์ A[q+1...r]์ ์ด๋ฏธ ์ ๋ ฌ๋์ด ์๋ค.
merge{
i <- p; j <- q+1; t <- 1;
while(i<=1 and j<= r){
if(A[i] <= A[j])
then tmp[t++] <- A[i++];
else tmp[t++] <- A[j++];
}
while(i <= q)
tmp[t++] <- A[i++];
while(j <= r)
tmp[t++] <- A[j++];
i <- p; t <- 1;
while(i <= r)
A[i++] <- tmp[t++];
}
- ....2 : ๋จผ์ ๋ฐฐ์ด์ ์ค์ ๋ถ๋ถ์ ์ฐพ๊ธฐ ์ํด .... 2 ์ฒ๋ผ ๋ฐฐ์ด์ ์ค์ q๋ฅผ ์ฐพ๋๋ค.
- ....3 : A[1...q] ๊น์ง ๋ฐฐ์ด์ ๋ mergeSort๋ฅผ ํธ์ถํ๋ค.
- ....4 : A[q+1 ... r] ๊น์ง ๋ฐฐ์ด์ ๋ mergeSort๋ฅผ ํธ์ถํ๋ค.
- ....5 : ๋ถํ ํ๋ ๋ชจ๋ ๋ฐฐ์ด์ ํฉ์น๋ค. ์ด ๊ณผ์ ์์ ์ ๋ ฌ์ด ์ด๋ฃจ์ด์ง๋ค.
๋ณํฉ ์ ๋ ฌ(Merge Sort)์ ์๋ฐ ์ฝ๋
'๐ป Computer Science > - Data Structure, Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ-์ด๋ก ] ์ด์ง ๊ฒ์ ํธ๋ฆฌ(Binary Search Tree) (0) | 2019.11.23 |
---|---|
[์๊ณ ๋ฆฌ์ฆ-์ด๋ก ] ํต ์ ๋ ฌ (Quick Sort) (0) | 2019.11.23 |
[์๊ณ ๋ฆฌ์ฆ-์ด๋ก ] ์ฝ์ ์ ๋ ฌ (Insertion Sort) (0) | 2019.11.23 |
[์๊ณ ๋ฆฌ์ฆ-์ด๋ก ] ๋ฒ๋ธ ์ ๋ ฌ (Bubble Sort) (0) | 2019.11.23 |
[์๊ณ ๋ฆฌ์ฆ-์ด๋ก ] ์ ํ ์ ๋ ฌ(Selection Sort) (0) | 2019.11.23 |
๋๊ธ