# ์ ํ ์ ๋ ฌ (Selection Sort)
written by sohyeon, hyemin ๐ก
# 1. ์ ํ ์ ๋ ฌ์ด๋?
์ ํ ์ ๋ ฌ
์ ๊ฐ์ฅ ์์ ์์๋ถํฐ ์ ํํด ์๋ง์ ์์น๋ก ์ฎ๊ฒจ์ ์์๋๋ก ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
# 2. ๋์ ๋ฐฉ์
1. ๊ฐ์ฅ ์์ ๊ฐ์ ์์์ธ 1์ ์ ํํด ์ ๋ ฌ์ ์์ํ๊ณ , 6๊ณผ ๊ตํํ๋ค.
2. ์์ง ์ ๋ ฌํ์ง ์์ ๋ฐฐ์ด์์ ๊ฐ์ฅ ์์ ์์์ธ 3์ ์ ํํด ์ ๋ ฌ์ ์์ํ๊ณ , ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์์ธ 4์ 3์ ๊ตํํ๋ค.
3~7. ์์ ๊ทธ๋ฆผ์ฒ๋ผ ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
# 3. ํน์ง
# 1) ์ฅ์
- ์๋ฃ ์ด๋ ํ์๊ฐ ๋ฏธ๋ฆฌ ๊ฒฐ์ ๋๋ค.
# 2) ๋จ์
- ์ ํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์์ ์ ์ด์ง ์๋ค.
- ์ฆ, ์์๊ฐ์ด ์ค๋ณต๋ ๊ฒฝ์ฐ ์๋์ ์ธ ์์น๊ฐ ๋ณ๊ฒฝ๋ ์ ์๋ค.
# 4. ์๊ฐ๋ณต์ก๋
๋น๊ต ํ์
- ๋ ๊ฐ์ for ๋ฃจํ์ ์คํ ํ์
- ์ธ๋ถ ๋ฃจํ : (n-1)๋ฒ
- ๋ด๋ถ ๋ฃจํ(์ต์๊ฐ ์ฐพ๊ธฐ) : 0์์ n-2๊น์ง ๋ณํ๋ i์ ๋ํ์ฌ
(n-1)-i๋ฒ
(n-1, n-2, ... , 2, 1๋ฒ)
๊ตํ ํ์
- ์ธ๋ถ ๋ฃจํ์ ์คํ ํ์์ ๋์ผํ๋ค.
- ํ ๋ฒ ๊ตํํ๊ธฐ ์ํ์ฌ 3๋ฒ์ ์ด๋์ด ํ์ํ๋ฏ๋ก ์ ์ฒด ์ด๋ ํ์๋
3(n-1)๋ฒ
T(n) = (n-1) + (n-2) + ... + 1 = n(n-1)/2 = O(n^2)
# 5. ์ ํ ์ ๋ ฌ Java ์ฝ๋
# ์ ํ ์ ๋ ฌ(SelectionSort)์ ๊ตํ ๊ณผ์
1. ์์ง ์ ๋ ฌํ์ง ์์ ๋ถ๋ถ์์ ๊ฐ์ฅ ์์ ํค์ ๊ฐ(a[min])์ ์ ํํ๋ค.
2. a[min]๊ณผ ์์ง ์ ๋ ฌํ์ง ์์ ๋ถ๋ถ์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๊ตํํ๋ค.
# ex) ์์
// ๋จ์ ์ ํ ์ ๋ ฌ
static void selectionSort(int[] a, int n) {
for (int i = 0; i < n - 1; i++) {
int min = i; // ์์ง ์ ๋ ฌ๋์ง ์์ ๋ถ๋ถ์์ ๊ฐ์ฅ ์์ ์์์ ์ธ๋ฑ์ค๋ฅผ ๊ธฐ๋กํ๋ค.
for (int j = i + 1; j < n; j++)
if(a[j] < a[min])
min = j;
if(i != min)
swap(a, i, min); // ์์ง ์ ๋ ฌ๋์ง ์์ ๋ถ๋ถ์ ์ฒซ ์์์ ๊ฐ์ฅ ์์ ์์๋ฅผ ๊ตํํ๋ค.
}
}
๋จ์ ์ ํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์์๊ฐ์ ๋น๊ตํ๋ ํ์๋ (n^2-n)/2
ํ์ด๋ค.
์ต์๊ฐ์ด ์๊ธฐ ์์ ์ด๋ฉด ์๋ฃ ์ด๋์ ํ์ง ์๋๋ก ํ๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ๋น๊ต ์ฐ์ฐ 1๊ฐ๊ฐ ์ด๋ ์ฐ์ฐ 3๊ฐ๋ณด๋ค ์๊ฐ์ด ์ ๊ฒ ๊ฑธ๋ฆฌ๋ฏ๋ก ํจ๊ณผ์ ์ด๋ค.
# Reference & Additional Resources
Do it! ์๋ฃ๊ตฌ์กฐ์ ํจ๊ป ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ ์ ๋ฌธ ์๋ฐํธ
C์ธ์ด๋ก ์ฝ๊ฒ ํ์ด์ด ์๋ฃ ๊ตฌ์กฐ