Merge Sort (ํฉ๋ณ ์ ๋ ฌ)
ํฉ๋ณ ์ ๋ ฌ์ด๋?
๊ธฐ๋ณธ์ ์ผ๋ก ํฉ๋ณ ์ ๋ ฌ์ '๋ฌธ์ ๋ฅผ ๋ถํ 'ํ๊ณ , ๋ถํ ๋ ๋ฌธ์ ๋ฅผ '๋ค์ ์ ๋ณตํ์ฌ ํฉ์น๋' ๊ณผ์ ์ด๋ค.
๋ถํ ์ ๋ณต(Divide and Conquer) ๊ธฐ๋ฐ์ผ๋ก ์ ๋ ฌ๋๋ ๋ฐฉ์
์ ๋ ฌํด์ผ ํ๋ ๋ฐฐ์ด์ด๋ ๋ฆฌ์คํธ๊ฐ ์ฃผ์ด์ง๋ฉด ๋ถํ ์ ๋ฐ๋ณตํ์ฌ ์ต๋ํ ์๊ฒ ์ชผ๊ฐ์ด, ์ธ์ ํ ์์๋ค๋ผ๋ฆฌ ๋น๊ตํด์ ์ ๋ ฌํ๋ ๋ฐฉ์์ด๋ค.
๋ฐ์ดํฐ๋ฅผ '๋น๊ต'ํ๋ฉด์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ '๋น๊ต ์ ๋ ฌ'์ด๋ฉฐ, ์ ๋ ฌ ๋์ ๋ฐ์ดํฐ ์ธ์ ์ถ๊ฐ์ ์ธ ๊ณต๊ฐ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ '์ ์๋ฆฌ ์ ๋ ฌ(in-place-sort)'์ด ์๋๋ค. ๋ถํ ์ ๋ณต์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ์ต๋ํ ๋ฌธ์ ๋ฅผ ์๊ฒ ์ชผ๊ฐ๊ณ ์์์๋ถํฐ ํฉ์ณ๋๊ฐ๋ค. ๋ฐ๋ผ์ '์์ ์ ๋ ฌ(Stable sort)' ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ ๋ถ๋ฆฐ๋ค.
๋ง์ฝ ์ ์๋ฆฌ ์ ๋ ฌ๋ก ๊ตฌํํ๋ ๊ฒฝ์ฐ์๋ ์ผ๋ถ ์ฑ๋ฅ์ ํฌ๊ธฐํด์ผ ํ๋ค.
Merge sort๋ binary tree ํํ๋ก ์ชผ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์ต๋ ๊น์ด๋ logN์ด ๋๋ค. ๊ฐ ๋ถํ (N๊ฐ) ๋ณ๋ก ํฉ๋ณ์ ์งํํ๋ฏ๋ก ์ด ์๊ฐ๋ณต์ก๋๋ O(NlogN)์ด ๋๋ค.
Quick sort๋ ์ต์ ์ ๊ฒฝ์ฐ O(N^2)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋๋ฐ, ์ต์ ์ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ ๊ฒฝ์ฐ ํฉ๋ณ ์ ๋ ฌ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ข๋ค๊ณ ํ๋ค.
ํฉ๋ณ ์ ๋ ฌ์ ํน์ง
O(NlogN)์ ์๊ฐ๋ณต์ก๋
์ต์ , ์ต์ , ํ๊ท ๋ชจ๋ ๋์ผํ๋ค.
ํญ์ ์ผ์ ํ ์ฑ๋ฅ์ ๋ณด์ฅํ์ฌ ์์ ์ ์ธ ์ ๋ ฌ ์๋๋ฅผ ์ ๊ณตํ๋ค.
O(N)์ ๊ณต๊ฐ๋ณต์ก๋
์ ๋ ฌ ๊ณผ์ ์์ ์์ ๋ฐฐ์ด์ด ํ์ํ๋ฏ๋ก, O(N)์ ์ถ๊ฐ ๊ณต๊ฐ์ด ๋ฐ์ํ๋ค.
๊ตฌํ๋ฐฉ์: ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ
๋ถํ (Divide): ์ ๋ ฅ ๋ฆฌ์คํธ๋ฅผ ๊ฑฐ์ ๊ฐ์ ํฌ๊ธฐ์ ๋ ๋ถ๋ถ์ผ๋ก ๋๋๋ค.
์ ๋ณต(Conquer): ์ฌ๊ท์ ์ผ๋ก ๊ฐ ๋ถ๋ถ ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ๋ค.
๊ฒฐํฉ(Combine): ์ ๋ ฌ๋ ๋ถ๋ถ ๋ฆฌ์คํธ๋ค์ ํ๋์ ์ ๋ ฌ๋ ๋ฆฌ์คํธ๋ก ๋ณํฉํ๋ค.
์ฅ๋จ์
์ฅ์
ํต ์ ๋ ฌ๊ณผ ๋ฌ๋ฆฌ pivot ์ ํ ๋ฌธ์ ๊ฐ ์์ด์ ์ฑ๋ฅ ๋ณ๋์ด ์ ๋ค.
์์ ์ ์ธ ์ฑ๋ฅ๊ณผ ์์ธก ๊ฐ๋ฅํ ์คํ์ผ๋ก ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ ๋ ฌ์์ ์์ฃผ ์ฌ์ฉ๋๋ฉฐ, ํนํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ ๋ ฌ์ ํจ๊ณผ์ ์ด๋ค.
๋จ์
์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ์๊ตฌ๋๊ณ , ๋์ฉ๋ ๋ฐ์ดํฐ์์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ ์ ์๋ค.
์ ์ ๋ฐ์ดํฐ์ ์์ ๋ค๋ฅธ ๊ฐ๋จํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ์ค๋ฒํค๋๊ฐ ํด ์ ์๋ค.
ํฉ๋ณ ์ ๋ ฌ ๊ณผ์
๋ถํ (Divide): ์ฃผ์ด์ง ๋ฆฌ์คํธ๋ฅผ ์ ๋ฐ์ผ๋ก ๋ถํ ํ์ฌ ๋ถ๋ถ ๋ฆฌ์คํธ๋ก ๋๋๋ค.
๋ถ๋ถ ๋ฆฌ์คํธ์ ๊ธธ์ด๊ฐ 0 ๋๋ 1์ด ๋ ๋๊น์ง 1๋ฒ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
์ ๋ณต(Conquer): ์ธ์ ๋ถ๋ถ ๋ฆฌ์คํธ์ ์ ๋ ฌํ์ฌ ํฉ์น๋ค.
๊ตฌํ
๋ฆฌ์คํธ์ ํฌ๊ธฐ๊ฐ 0 ๋๋ 1์ธ ๊ฒฝ์ฐ ์ด๋ฏธ ์ ๋ ฌ๋ ๋ฆฌ์คํธ๋ก ํ๋จํ๋ค.
1๋ฒ์ ํด๋นํ์ง ์๊ณ ์ ๋ ฌ๋์ง ์์ ๋ฆฌ์คํธ๋ ๋น์ทํ ํฌ๊ธฐ์ ๋ ๋ถ๋ถ ๋ฆฌ์คํธ๋ก ๋๋๋ค.
๊ฐ ์๋ธ ๋ฆฌ์คํธ๋ฅผ, ์ฌ๊ท๋ก ํฉ๋ณ ์ก๋ ฌ์ ์ด์ฉํด์ ์ ๋ ฌํ๋ค.
๋ ์๋ธ ๋ฆฌ์คํธ๋ฅผ ๋ค์ ํ๋์ ๋ฆฌ์คํธ๋ก ํฉ์น๋ค.










Last updated