๐ ์ฝ์ ์ ๋ ฌ
์ฝ์ ์ ๋ ฌ์์๋ ์ ๋ ฌ๋์์ด ๋ ์์๋ฅผ ๋ ๋ถ๋ถ์ผ๋ก ๋๋๋ ๊ฒ์ด ํต์ฌ์ด๋ค. ์ด๋ฏธ ์ ๋ ฌ๋ ๋ถ๋ถ(์ผ์ชฝ)๊ณผ ์ ๋ ฌํด์ผ ํ๋ ๋ถ๋ถ(์ค๋ฅธ์ชฝ)์ผ๋ก ๋๋๊ณ ์ ๋ ฌํด์ผ ํ๋ ๋ถ๋ถ์ ์ฒซ๋ฒ์งธ ์์๋ฅผ ์ด๋ฏธ ์ ๋ ฌ์ด ๋ ๋ถ๋ถ์ ํ๋์ฉ ์ฝ์ ํด ์ ๋ ฌํ๋ค. ์ฆ, ์ ๋ ฌํ ๋ถ๋ถ์ ์์๋ฅผ ์ด๋ฏธ ์ ๋ ฌ๋ ๋ถ๋ถ์ ํ๋์ฉ ์ฝ์ ํด ์ ์ฒด์ ์ผ๋ก ์ ๋ ฌ๋ ๋ถ๋ถ์ ๋น์จ์ ํค์ฐ๋ ๊ฒ์ด๋ค. ์ด๋ฏธ ์ ๋ ฌ๋ ๋ถ๋ถ์ ํ๋์ฉ ์ฝ์ ํ๋ค๊ณ ํด์ '์ฝ์ '์ ๋ ฌ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ด๋ ์ฝ์ ํ ๋๋ ์ด๋ฏธ ์ ๋ ฌ๋ ๋ถ๋ถ์ ๊ฐ์ฅ ํฐ ์์(๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์์)๋ถํฐ ๋น๊ตํด๋๊ฐ๋ค.
n = 5 ์ธ { 8, 3, 9, 7, 6 } ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ฝ์ ์ ๋ ฌํด๋ณธ๋ค. ์ด๋ฏธ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ๋ถ๋ถ์ ์ผ์ชฝ์, ์ ๋ ฌ๋์ง ์์ ๋ถ๋ถ์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋๊ณ 3๋ถํฐ ํ๋์ฉ ์ฝ์ ํ๋ค. ์ด 3, 9, 7, 6 ์ ์ซ์๊ฐ ์ถ๊ฐ๋์์ผ๋ฉฐ ์ฝ์ ์ ์ด๋ก์ ์ด๋ฏธ ์ ๋ ฌ๋ ๋ถ๋ถ ์ค ๊ฐ์ฅ ํฐ ์์๋ถํฐ ์ค๋ฅธ์ชฝ -> ์ผ์ชฝ์ผ๋ก ๋น๊ตํด๋๊ฐ๋ค.
๐ ์๊ฐ๋ณต์ก๋
์๊ณ ๋ฆฌ์ฆ ์ ๊ณต ์์ ๋ ์ ๋ง ๋์์ด ๋ง์ด ๋์๋ ๋ถ๋ถ์ด๋ค. (๊ต์๋์ ๋ง์๊ณผ ๊ฐ์์๋ฃ ์ธ์ฉํ๋ค)
์ฝ์ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋๋ ์ต์ ๊ณผ ์ต์์ผ ๋๋ก ๊ตฌ๋ถํ ์ ์๋ค.
- ์ฑ๋ฅ์ด ๊ฐ์ฅ ์ข์ ๋๋ ์ด๋ฏธ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์์ ๋์ด๋ค. ์ด๋ฏธ ์ ๋ ฌ์ด ๋์๋์ง ์ฌ๋ถ๋ ์ฌ๋๋ง ์๊ณ ์์ผ๋ฏ๋ก ์ ๋ ฌ๋ ๋ถ๋ถ์ ์์๋ฅผ ๋ฃ์ ๋๋ง๋ค ๊ฐ์ฅ ํฐ ์ซ์์์ ๋น๊ต๋ฅผ ํ๋ฒ๋ง ํ๊ฒ ๋๋ฏ๋ก ์ด n-1 ๋ฒ ๊ณ์ฐ์ผ๋ก O(n) ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
- ์ต์ ์ ๊ฒฝ์ฐ์๋ ์ญ์์ผ๋ก (๋ด๋ฆผ์ฐจ์์ผ๋ก) ์ ๋ ฌ๋ ๊ฒฝ์ฐ์ด๋ค. ์ด๋๋ ๊ฐ๋ฅํ ๋ชจ๋ ๋น๊ต๋ฅผ ๋ค ํด๋ด์ผ ํ๋ฏ๋ก i + 1 ๋ฒ์งธ ์์๋ฅผ ์ถ๊ฐํ ๋ i ๊ฐ์ ์์ ์ ๋ ฌ๋ ์์์ ๋ชจ๋ ๋น๊ตํด์ค์ผ ํ๋ค. ์ด๋์ ์ฑ๋ฅ์ 1 + 2 + ... + (n - 1) = n(n-1) / 2 ๊ฐ ๋จ. O(n^2) ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
- ์ต์ ์ ๊ฒฝ์ฐ๊ฐ ์๋๋๋ผ๋ ํ๊ท ์ ์ธ ๊ฒฝ์ฐ์ ์๊ฐ ๋ณต์ก๋ ๋ํ O(n^2)์ด ๋๋ค. ์ด๋ฅผ ์ฆ๋ช ํ๋ ค๋ฉด ์์์ด ๋๋ฌด ๊ธธ์ด์ง๋๋ฐ ์ฌ๊ธฐ ์ฐ๊ธฐ์ ๋ฒ๊ฑฐ๋ก์ฐ๋ฏ๋ก ํจ์ค..
๊ฒฐ๋ก ์ ์ผ๋ก ์ธ์ ํ ๋ ์์๋ฅผ ๊ตํํ๋ ๋ฐฉ์(๋ฒ๋ธ์ ๋ ฌ, ์ฝ์ ์ ๋ ฌ ๋ฑ)์ O(n^2) ์๊ฐ๋ณต์ก๋๊ฐ ์ต์ ์ด๋ค.
๊ฐ๋จํ๊ฒ ์ฆ๋ช ์ ํด๋ณด์๋ฉด n ๊ฐ์ ์๋ก ๋ค๋ฅธ ๊ฐ์ ๊ฐ์ง๋ ์์๋ฅผ ๋์ดํ๋ ๋ฐฉ๋ฒ์ n! ์ด๋ค. n๊ฐ์ ์์ ์ค 2๊ฐ๋ฅผ ๋ฝ๋ ๊ฒฝ์ฐ๋ nC2 = (n, 2)๊ฐ์ง. ์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด์ด๋ผ๋ฉด ์์๊ฐ ํ๋ฆฐ ์์ด ๋ถ๋ช ์์ ๊ฒ์ด๊ณ ์์ ํ ์ ๋ ฌ๋ ๋ฐฐ์ด์ด๋ผ๋ฉด ์์๊ฐ ํ๋ฆฐ ์์ ์์ ๊ฒ์ด๋ค. ์ด๋ ์ธ์ ํ ๋ ์์๋ฅผ ๊ตํํ๋ฉด ์์๊ฐ ํ๋ฆฐ ์ ํ๋๊ฐ ์ค์ด๋ ๋ค. ๋ฐ๋ผ์ n๊ฐ์ ์์ ์ค 2๊ฐ๋ฅผ ๋ฝ๋ (n, 2)๋ฒ์ ๊ตํ์ด ํ๊ท ์ ์ผ๋ก ํ์ํ๋ฉฐ ์ด๋ ๋ง์ฐฌ๊ฐ์ง๋ก O(n^2)์ด ๋๋ค.
๐ C++ ๊ตฌํ
๊ฐ๋จํ๊ฒ insertion_sort ๋ผ๋ ํจ์๋ก๋ง ๊ตฌํํ๋ค. ๋ฒ๋ธ์ ๋ ฌ๊ณผ ๋น์ทํ ๊ตฌ์กฐ๋ผ ํฌ๊ฒ ์ด๋ ต์ง ์์๋ค.
๋ณ๋ ฌ ๋ฌธ์ ๋ ๋ค๋ฅธ ๊ฒ๋ณด๋ค๋ ์ธ๋ฑ์ฑ๋ง ์ํ๋ฉด ๋ฌธ์ ์์ง..
vector<int> insertion_sort(vector<int> target) {
int n = target.size();
int temp;
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j > 0; j--) {
if (target[j] < target[j-1]) {
temp = target[j-1];
target[j-1] = target[j];
target[j] = temp;
}
else
break;
}
// i๋ฒ์งธ ์ ๋ ฌ ๊ฒฐ๊ณผ ์ถ๋ ฅ
for (int c = 0; c < n; c++) {
cout << target[c] << " ";
}
cout << endl;
}
return target;
}
๋ค์์ ๋ณํฉ์ ๋ ฌ!
'Problem Solving > Algorithm, DS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ๊ธฐ์์ ๋ ฌ, ๊ณ์์ ๋ ฌ Radix, Counting Sort (C++ ๊ตฌํ) (0) | 2021.01.04 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ํ ์ ๋ ฌ Heap Sort (C++ ๊ตฌํ, make_heap, pop_heap) (0) | 2021.01.03 |
[์๊ณ ๋ฆฌ์ฆ] ํต์ ๋ ฌ Quick Sort (C++ ๊ตฌํ) (0) | 2021.01.03 |
[์๊ณ ๋ฆฌ์ฆ] ๋ณํฉ์ ๋ ฌ Merge Sort (C++ ๊ตฌํ) (0) | 2021.01.02 |
[์๊ณ ๋ฆฌ์ฆ] ๋ฒ๋ธ์ ๋ ฌ Bubble Sort (C++ ๊ตฌํ) (0) | 2020.12.30 |