์ฝ๋ฉ ํ ์คํธ์์ ๋ค๋ฃจ๋ ์ฃผ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ 8๊ฐ์ง๋ฅผ ์ฌ๋ฌ ๊ธฐ์ค์ผ๋ก ๋ถ๋ฅํ์ฌ ์ ๋ฆฌํ๋ค.
| ํ์ผ | ์๊ณ ๋ฆฌ์ฆ |
|---|---|
| bubble_sort.md | ๋ฒ๋ธ ์ ๋ ฌ |
| selection_sort.md | ์ ํ ์ ๋ ฌ |
| insertion_sort.md | ์ฝ์ ์ ๋ ฌ |
| merge_sort.md | ๋ณํฉ ์ ๋ ฌ |
| quick_sort.md | ํต ์ ๋ ฌ |
| heap_sort.md | ํ ์ ๋ ฌ |
| counting_sort.md | ๊ณ์ ์ ๋ ฌ |
| radix_sort.md | ๊ธฐ์ ์ ๋ ฌ |
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ฅ ๊ทผ๋ณธ์ ์ผ๋ก ๋๋๋ ๊ธฐ์ค์ด๋ค.
๋น๊ต ๊ธฐ๋ฐ ์ ๋ ฌ(Comparison Sort) ์ ๋ ์์๋ฅผ >, < ๋ฑ์ ์ฐ์ฐ์ผ๋ก ๋น๊ตํ์ฌ ์์๋ฅผ ๊ฒฐ์ ํ๋ค. ์ ๋ณด ์ด๋ก ์ ์ํด ์ต์
์ ๊ฒฝ์ฐ ฮฉ(n log n) ๋น๊ต๊ฐ ๋ฐ๋์ ํ์ํ๋ค๋ ๊ฒ์ด ์ํ์ ์ผ๋ก ์ฆ๋ช
๋์ด ์๋ค.
๋น๋น๊ต ๊ธฐ๋ฐ ์ ๋ ฌ(Non-comparison Sort) ์ ์์์ ๊ฐ ์์ฒด(์๋ฆฟ์, ๋น๋)๋ฅผ ํ์ฉํ์ฌ ๋น๊ต ์์ด ์ ๋ ฌํ๋ค. ์ด๋ก ์ ํํ์ ์ฐํํด O(n) ์ ๊ทผ์ ํ ์ ์์ง๋ง, ์ ์ฉ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์กฐ๊ฑด์ด ์กด์ฌํ๋ค.
| ๊ตฌ๋ถ | ์๊ณ ๋ฆฌ์ฆ | ์ด๋ก ์ ํํ |
|---|---|---|
| ๋น๊ต ๊ธฐ๋ฐ | ๋ฒ๋ธ, ์ ํ, ์ฝ์ , ๋ณํฉ, ํต, ํ | ฮฉ(n log n) |
| ๋น๋น๊ต ๊ธฐ๋ฐ | ๊ณ์, ๊ธฐ์ | O(n) ๊ฐ๋ฅ |
์ด๋ค ์ ๋ต์ผ๋ก ์ ๋ ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋์ ๋ฐ๋ผ ๊ตฌ๋ถํ๋ค.
๋งค ๋จ๊ณ๋ง๋ค ์ธ์ ๋น๊ตยท๊ตํ ๋๋ ์ต์๊ฐ ํ์์ ๋ฐ๋ณตํ๋ค. ๊ตฌํ์ด ๋จ์ํ์ง๋ง O(nยฒ)์ด๋ค.
| ์๊ณ ๋ฆฌ์ฆ | ํต์ฌ ์์ด๋์ด |
|---|---|
| ๋ฒ๋ธ ์ ๋ ฌ | ์ธ์ ํ ๋ ์์๋ฅผ ๋น๊ตํด ๊ตํ ๋ฐ๋ณต |
| ์ ํ ์ ๋ ฌ | ๋ฏธ์ ๋ ฌ ๊ตฌ๊ฐ์ ์ต์๊ฐ์ ์ ํํด ์ ์๋ฆฌ์ ๋ฐฐ์น |
| ์ฝ์ ์ ๋ ฌ | ๋ฏธ์ ๋ ฌ ์์๋ฅผ ์ ๋ ฌ๋ ๊ตฌ๊ฐ์ ์ฌ๋ฐ๋ฅธ ์์น์ ์ฝ์ |
๋ฌธ์ ๋ฅผ ์์ ๋ถ๋ถ์ผ๋ก ๋๋ ์ฌ๊ท์ ์ผ๋ก ํด๊ฒฐํ๋ค. O(n log n)์ด๋ค.
| ์๊ณ ๋ฆฌ์ฆ | ํต์ฌ ์์ด๋์ด |
|---|---|
| ๋ณํฉ ์ ๋ ฌ | ๋ฐ์ผ๋ก ๋๋ ๊ฐ๊ฐ ์ ๋ ฌ ํ ๋ณํฉ |
| ํต ์ ๋ ฌ | ํผ๋ฒ ๊ธฐ์ค์ผ๋ก ๋ถํ ํ ๊ฐ ๋ถ๋ถ ์ฌ๊ท ์ ๋ ฌ |
ํน์ ์๋ฃ๊ตฌ์กฐ์ ์ฑ์ง์ ์ด์ฉํ์ฌ ์ ๋ ฌํ๋ค.
| ์๊ณ ๋ฆฌ์ฆ | ํต์ฌ ์์ด๋์ด |
|---|---|
| ํ ์ ๋ ฌ | ์ต๋ ํ์ผ๋ก ๊ตฌ์ฑ ํ ๋ฃจํธ(์ต๋๊ฐ)๋ฅผ ๋ฐ๋ณต ์ถ์ถ |
์์์ ๊ฐ ๋ถํฌ๋ฅผ ํ์ฉํด ๋น๊ต ์์ด ์ ๋ ฌํ๋ค.
| ์๊ณ ๋ฆฌ์ฆ | ํต์ฌ ์์ด๋์ด |
|---|---|
| ๊ณ์ ์ ๋ ฌ | ๊ฐ ๊ฐ์ ๋ฑ์ฅ ํ์๋ฅผ ๊ธฐ๋กํด ์์๋๋ก ๋์ด |
| ๊ธฐ์ ์ ๋ ฌ | ์๋ฆฟ์ ๋จ์๋ก ๋ฐ๋ณต ๊ณ์ ์ ๋ ฌ ์ ์ฉ |
| ๋ณต์ก๋ | ์๊ณ ๋ฆฌ์ฆ | ์กฐ๊ฑด |
|---|---|---|
| O(n) | ์ฝ์ ์ ๋ ฌ | ์ด๋ฏธ ์ ๋ ฌ๋ ๋ฐฐ์ด (์ต์ ) |
| O(n) | ๊ณ์ ์ ๋ ฌ, ๊ธฐ์ ์ ๋ ฌ | ๊ฐ ๋ฒ์ k = O(n) ์กฐ๊ฑด ํ |
| O(n log n) | ๋ณํฉ ์ ๋ ฌ, ํ ์ ๋ ฌ | ํญ์ ๋ณด์ฅ |
| O(n log n) | ํต ์ ๋ ฌ | ํ๊ท (์ต์ ์ O(nยฒ)) |
| O(nยฒ) | ๋ฒ๋ธ, ์ ํ, ์ฝ์ | ํ๊ท ยท์ต์ |
๋น๊ต ๊ธฐ๋ฐ ์ ๋ ฌ์์ ํญ์ O(n log n)์ ๋ณด์ฅํ๋ ๊ฒ์ ๋ณํฉ ์ ๋ ฌ๊ณผ ํ ์ ๋ ฌ๋ฟ์ด๋ค.
ํต ์ ๋ ฌ์ ํ๊ท ์ ์ผ๋ก ๊ฐ์ฅ ๋น ๋ฅด์ง๋ง ์ต์ ์ O(nยฒ)์ด๋ค.
| ๊ตฌ๋ถ | ์๊ณ ๋ฆฌ์ฆ | ๊ณต๊ฐ ๋ณต์ก๋ |
|---|---|---|
| ์ ์๋ฆฌ O(1) | ๋ฒ๋ธ, ์ ํ, ์ฝ์ , ํ | O(1) |
| ์คํ O(log n) | ํต (์ฌ๊ท ์คํ) | O(log n) |
| ์ถ๊ฐ ๋ฐฐ์ด ํ์ | ๋ณํฉ | O(n) |
| ์นด์ดํธ ๋ฐฐ์ด ํ์ | ๊ณ์ | O(k) |
| ์ถ๋ ฅ ๋ฐฐ์ด ํ์ | ๊ธฐ์ | O(n + k) |
์ต์ O(n log n) + ๊ณต๊ฐ O(1) ์ ๋์์ ๋ง์กฑํ๋ ๋น๊ต ๊ธฐ๋ฐ ์ ๋ ฌ์ ํ ์ ๋ ฌ๋ฟ์ด๋ค.
๋์ผํ ํค๋ฅผ ๊ฐ์ง ์์๋ค์ ์๋ ์๋์ ์์๊ฐ ์ ๋ ฌ ํ์๋ ์ ์ง๋๋์ง ์ฌ๋ถ.
๋ค์ค ํค ์ ๋ ฌ(์: ์ด๋ฆ์ผ๋ก ์ ๋ ฌ๋ ๊ฒฐ๊ณผ๋ฅผ ๋์ด๋ก ๋ค์ ์ ๋ ฌ)์ด๋ ๊ธฐ์ ์ ๋ ฌ์ ์๋ธ๋ฃจํด์ผ๋ก ์ฌ์ฉํ ๋ ์์ ์ฑ์ด ํ์์ ์ผ๋ก ์๊ตฌ๋๋ค.
| ๊ตฌ๋ถ | ์๊ณ ๋ฆฌ์ฆ |
|---|---|
| ์์ (Stable) | ๋ฒ๋ธ, ์ฝ์ , ๋ณํฉ, ๊ณ์, ๊ธฐ์ |
| ๋ถ์์ (Unstable) | ์ ํ, ํต, ํ |
์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ ๋ถ๋ถ์ ์ผ๋ก ์ ๋ ฌ๋์ด ์์ ๋ ๋ ๋น ๋ฅด๊ฒ ๋์ํ๋์ง ์ฌ๋ถ.
| ๊ตฌ๋ถ | ์๊ณ ๋ฆฌ์ฆ | ์ด์ |
|---|---|---|
| ์ ์์ (Adaptive) | ์ฝ์ , ๋ฒ๋ธ (์กฐ๊ธฐ ์ข ๋ฃ) | ์ ๋ ฌ๋ ๊ตฌ๊ฐ์ ๋น๊ต๋ง ํ๊ณ ์ด๋ ์์ |
| ๋น์ ์์ (Non-adaptive) | ์ ํ, ํ, ๋ณํฉ, ํต, ๊ณ์, ๊ธฐ์ | ์ ๋ ฅ ์ํ์ ๋ฌด๊ดํ๊ฒ ๋์ผํ ์ฐ์ฐ ์ํ |
Java์ Tim Sort(์ฝ์ + ๋ณํฉ)๊ฐ ์ค์ ๋ฐ์ดํฐ์์ ๋น ๋ฅธ ์ด์ ๊ฐ ์ ์์ฑ ๋๋ฌธ์ด๋ค.
| ๊ตฌ๋ถ | ์๊ณ ๋ฆฌ์ฆ | ์กฐ๊ฑด |
|---|---|---|
| ๋ฒ์ฉ | ๋ฒ๋ธ, ์ ํ, ์ฝ์ , ๋ณํฉ, ํต, ํ | ๋น๊ต ๊ฐ๋ฅํ ๋ชจ๋ ๋ฐ์ดํฐ |
| ์ ์ ํ์ | ๊ณ์, ๊ธฐ์ | ์ ์ ๋๋ ์ ์๋ก ๋งคํ ๊ฐ๋ฅํ ๊ฐ |
| ๋ฒ์ ์ ํ | ๊ณ์ | ๊ฐ์ ๋ฒ์ k๊ฐ ์ถฉ๋ถํ ์์์ผ ํจ |
| ์๋ฆฟ์ ๊ณ ์ | ๊ธฐ์ | ์๋ฆฟ์ d๊ฐ ์์์ผ ํจ์จ์ |
๊ฐ๋ณ ์๊ณ ๋ฆฌ์ฆ์ ๋์ด ์๋ก ์ด๋ป๊ฒ ์ฐ๊ฒฐ๋๋์ง ์ดํดํ๋ฉด ์ ๋ ฌ์ ๋ ๊น์ด ํ์ ํ ์ ์๋ค.
์ญ์๋ ๋ฐฐ์ด์์ i < j์ด์ง๋ง arr[i] > arr[j]์ธ ์์ ์๋ค. ์ ๋ ฌ์ด ์๋ฃ๋ ์ํ์ ์ญ์ ์๋ 0์ด๋ฉฐ, ์ญ์๊ฐ ๋ง์์๋ก ์ ๋ ฌ์ด ๋ ๋ง์ ์์
์ ํ์๋ก ํ๋ค.
| ์๊ณ ๋ฆฌ์ฆ | ์ญ์์์ ๊ด๊ณ |
|---|---|
| ๋ฒ๋ธ ์ ๋ ฌ | ๊ตํ ํ์ = ์ญ์์ ์ |
| ์ฝ์ ์ ๋ ฌ | ์ด ์ด๋(shift) ํ์ = ์ญ์์ ์. ์ญ์๊ฐ ์ ์์๋ก ๋น ๋ฆ (์ ์์ฑ์ ๊ทผ๊ฑฐ) |
| ๋ณํฉ ์ ๋ ฌ | ๋ณํฉ ์ ์ค๋ฅธ์ชฝ ์์๊ฐ ๋จผ์ ์ ํ๋ ๋๋ง๋ค ์ญ์๊ฐ ๋์ ๋จ โ O(n log n)์ ์ญ์ ์ด ๊ฐ์ ๊ณ์ฐ ๊ฐ๋ฅ |
์ญ์ ์๊ฐ O(n)์ด๋ฉด ์ฝ์ ์ ๋ ฌ์ด O(n)์ผ๋ก ๋์ํ๋ค. ์ญ์ ๊ฐ์๋ฅผ ์ธ๋ ๋ฌธ์ (BOJ 1517)๋ ๋ณํฉ ์ ๋ ฌ๋ก O(n log n)์ ํด๊ฒฐํ๋ค.
๊ธฐ์ ์ ๋ ฌ์ ๊ณ์ ์ ๋ ฌ์ ์๋ธ๋ฃจํด์ผ๋ก ์ฌ์ฉํ๋ค. ๊ฐ ์๋ฆฟ์ ๋จ์์ ์ ๋ ฌ์ ๊ณ์ ์ ๋ ฌ๋ก ์ํํ๋ฉฐ, ์ด๋ ๊ณ์ ์ ๋ ฌ์ด ๋ฐ๋์ ์์ ์ ๋ ฌ์ด์ด์ผ ๋ฎ์ ์๋ฆฌ์ ์ ๋ ฌ ๊ฒฐ๊ณผ๊ฐ ๋ณด์กด๋๋ค.
๊ธฐ์ ์ ๋ ฌ
โโ 1์ ์๋ฆฌ: ๊ณ์ ์ ๋ ฌ (์์ )
โโ 10์ ์๋ฆฌ: ๊ณ์ ์ ๋ ฌ (์์ )
โโ 100์ ์๋ฆฌ: ๊ณ์ ์ ๋ ฌ (์์ )
...
๊ณ์ ์ ๋ ฌ์ด ๋ถ์์ ํ๋ค๋ฉด ์๋ฆฟ์๋ฅผ ์ฌ๋ผ๊ฐ์๋ก ์ด์ ์ ๋ ฌ ๊ฒฐ๊ณผ๊ฐ ๊นจ์ ธ ์ต์ข ๊ฒฐ๊ณผ๊ฐ ํ๋ฆฐ๋ค.
Java์ Arrays.sort(Object[]), Python์ sorted()์ ์ฌ์ฉ๋๋ Tim Sort๋ ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฅ์ ์ ๊ฒฐํฉํ๋ค.
| ์ญํ | ์๊ณ ๋ฆฌ์ฆ | ์ด์ |
|---|---|---|
| ์๊ท๋ชจ ๊ตฌ๊ฐ ์ ๋ ฌ | ์ฝ์ ์ ๋ ฌ | n์ด ์์ ๋(โค32~64) ์ค๋ฒํค๋๊ฐ ์ ๊ณ , ๋ถ๋ถ ์ ๋ ฌ ์ ์ ์์ฑ ๋ฐํ |
| ์ ์ฒด ๋ณํฉ | ๋ณํฉ ์ ๋ ฌ | ์์ ์ ๋ ฌ ๋ณด์ฅ, ํญ์ O(n log n) |
์ค์ ๋ฐ์ดํฐ๋ ์์ ๋ฌด์์๊ฐ ์๋ ๋ถ๋ถ ์ ๋ ฌ๋ ๊ตฌ๊ฐ(run)์ด ๋ง์, Tim Sort๊ฐ ์ด๋ฅผ ์ ๊ทน ํ์ฉํ๋ค.
๋น๊ต ๊ธฐ๋ฐ ์ ๋ ฌ์์ ์ด๋ค ์๊ณ ๋ฆฌ์ฆ๋ ์ต์ ์ ๊ฒฝ์ฐ ฮฉ(n log n)๋ฒ์ ๋น๊ต ๋ฅผ ํผํ ์ ์๋ค. ์ด๋ ์ํ์ ์ผ๋ก ์ฆ๋ช ๋ ์ฌ์ค์ด๋ฉฐ, ์ง๊ด์ ์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ์ด ์ดํดํ ์ ์๋ค.
n๊ฐ์ ์์๋ฅผ ์ ๋ ฌํ๋ ๊ณผ์ ์ ์ด์ง ๊ฒฐ์ ํธ๋ฆฌ๋ก ํํํ ์ ์๋ค.
- ๊ฐ ๋ด๋ถ ๋
ธ๋: ๋ ์์๋ฅผ ๋น๊ตํ๋ ๊ฒฐ์ (
arr[i] < arr[j]?) - ๊ฐ ๋ฆฌํ ๋ ธ๋: ํ๋์ ๊ฐ๋ฅํ ์ ๋ ฌ ๊ฒฐ๊ณผ (์์ด)
- n๊ฐ์ ์์๊ฐ ๊ฐ์ง ์ ์๋ ์์ด์ ์: n!
ํธ๋ฆฌ์ ๋ฆฌํ ๋ ธ๋๊ฐ ์ต์ n!๊ฐ ์ด์ ์์ด์ผ ๋ชจ๋ ์ ๋ ฅ ์์๋ฅผ ๊ตฌ๋ณํ ์ ์๋ค.
๋์ด๊ฐ h์ธ ์ด์ง ํธ๋ฆฌ์ ์ต๋ ๋ฆฌํ ์ = 2^h
๋ฐ๋ผ์: 2^h โฅ n!
โ h โฅ logโ(n!)
โ h โฅ ฮฉ(n log n) (์คํธ๋ง ๊ทผ์ฌ: log(n!) โ n log n)
์ฆ, ์ด๋ค ๋น๊ต ๊ธฐ๋ฐ ์ ๋ ฌ๋ ์ต์ ์ ๊ฒฝ์ฐ ์ต์ ฮฉ(n log n)๋ฒ์ ๋น๊ต๊ฐ ๋ฐ๋์ ํ์ํ๋ค.
๊ณ์ยท๊ธฐ์ ์ ๋ ฌ์ ์์๋ฅผ ์ง์ ๋น๊ตํ์ง ์๊ณ ๊ฐ ์์ฒด๋ฅผ ๋ฐฐ์ด ์ธ๋ฑ์ค๋ก ํ์ฉํ๋ค. ๊ฒฐ์ ํธ๋ฆฌ ๋ชจ๋ธ์ด ์ ์ฉ๋์ง ์์ผ๋ฏ๋ก ์ด ํํ์ ๊ตฌ์๋์ง ์๋๋ค. ๋จ, ๊ทธ ๋์ ๋ฐ์ดํฐ๊ฐ ์ ์์ด๊ฑฐ๋ ๋ฒ์๊ฐ ์ ํ๋์ด์ผ ํ๋ค๋ ์กฐ๊ฑด์ด ํ์ํ๋ค.
| ์๊ณ ๋ฆฌ์ฆ | ์ต์ | ํ๊ท | ์ต์ | ๊ณต๊ฐ | ์์ | ์ ์ | ํจ๋ฌ๋ค์ |
|---|---|---|---|---|---|---|---|
| ๋ฒ๋ธ ์ ๋ ฌ | O(n) | O(nยฒ) | O(nยฒ) | O(1) | โ | โ | ๋จ์ ๋ฐ๋ณต |
| ์ ํ ์ ๋ ฌ | O(nยฒ) | O(nยฒ) | O(nยฒ) | O(1) | โ | โ | ๋จ์ ๋ฐ๋ณต |
| ์ฝ์ ์ ๋ ฌ | O(n) | O(nยฒ) | O(nยฒ) | O(1) | โ | โ | ๋จ์ ๋ฐ๋ณต |
| ๋ณํฉ ์ ๋ ฌ | O(n log n) | O(n log n) | O(n log n) | O(n) | โ | โ | ๋ถํ ์ ๋ณต |
| ํต ์ ๋ ฌ | O(n log n) | O(n log n) | O(nยฒ) | O(log n) | โ | โ | ๋ถํ ์ ๋ณต |
| ํ ์ ๋ ฌ | O(n log n) | O(n log n) | O(n log n) | O(1) | โ | โ | ์๋ฃ๊ตฌ์กฐ |
| ๊ณ์ ์ ๋ ฌ | O(n + k) | O(n + k) | O(n + k) | O(k) | โ | โ | ๋ถํฌ ๊ธฐ๋ฐ |
| ๊ธฐ์ ์ ๋ ฌ | O(d(n+k)) | O(d(n+k)) | O(d(n+k)) | O(n+k) | โ | โ | ๋ถํฌ ๊ธฐ๋ฐ |
๋ฐ์ดํฐ๊ฐ ์ ์์ด๊ณ ๊ฐ์ ๋ฒ์๊ฐ ์๋ค (k โค 10^6)
โโโ ๊ณ์ ์ ๋ ฌ / ๊ธฐ์ ์ ๋ ฌ
๋ฐ์ดํฐ๊ฐ ๊ฑฐ์ ์ ๋ ฌ๋์ด ์๋ค
โโโ ์ฝ์
์ ๋ ฌ
์์ ์ ๋ ฌ์ด ํ์ํ๋ค + ์ต์
๋ ๋ณด์ฅํด์ผ ํ๋ค
โโโ ๋ณํฉ ์ ๋ ฌ
๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ํ์ ์ด๋ค + ์ต์
๋ ๋ณด์ฅํด์ผ ํ๋ค
โโโ ํ ์ ๋ ฌ
์ผ๋ฐ์ ์ธ ๋ฒ์ฉ ์ ๋ ฌ (๋น ๋ฅธ ํ๊ท ์ฑ๋ฅ)
โโโ ํต ์ ๋ ฌ (๋๋ค ํผ๋ฒ) ๋๋ Arrays.sort()
n์ด ์๋ค (n โค 1,000)
โโโ ์ฝ์
์ ๋ ฌ (๊ตฌํ ๋จ์ + ์ค๋ฒํค๋ ์ ์)