- ๋น
์ค๋ ์๊ณ ๋ฆฌ์ฆ์ ๋น๊ตํ๊ณ ์ฃผ์ด์ง ์ํฉ์ ์๋ง์ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฐ์ ํ๊ฒ ํด ์ฃผ๋ ์ข์ ๋๊ตฌ์ด์ง๋ง, ์ ์ผํ ๋๊ตฌ๋ ์๋๋ค.
1. ์ ํ ์ ๋ ฌ
- ์ ํ ์ ๋ ฌ์ ์ํ์ค
- ๋ฐฐ์ด์ ๊ฐ ์
์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ์ธํ๋ฉด์ ์ด๋ค ๊ฐ์ด ์ต์๊ฐ์ธ์ง ํ๋จํ๊ณ ๊ฐ์ฅ ์์ ๊ฐ์ ๊ธฐ๋กํ๋ค.
- ์ต์๊ฐ๊ณผ pass through๋ฅผ ์์ํ์ ๋์ ๊ฐ์ ๊ตํํ๋ค.
- pass through๋ฅผ ๋ฐ๋ณตํ๋ค.
2. ์ ํ ์ ๋ ฌ ์ค์ ๋ก ํด๋ณด๊ธฐ & 3. ์ ํ ์ ๋ ฌ ๊ตฌํ (Kotlin)
fun main() {
selectionSort(arrayOf(10, 9, 4, 6, 7, 8, 3, 2, 11, 1)).forEach { print("$it ") }
}
fun selectionSort(arr: Array<Int>): Array<Int> {
for (i in arr.indices) {
var lowestNumidx = i
for (j in i + 1 until arr.size) {
if (arr[j] < arr[lowestNumidx]) lowestNumidx = j
}
if (lowestNumidx != i) {
var temp = arr[i]
arr[i] = arr[lowestNumidx]
arr[lowestNumidx] = temp
}
}
return arr
}
3. ์ ํ ์ ๋ ฌ์ ํจ์จ์ฑ
- ์ ํ ์ ๋ ฌ์ ๋น๊ต & ๊ตํ์ ๋ ๋จ๊ณ๋ก ์ด๋ฃจ์ด์ง๋ค.
- ์์ N๊ฐ๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์์, ๋น๊ต๋ N - 1 + N - 2 + N - 3 + … + 1 ๋ฒ ์ผ์ด๋๋ค.
- ๊ตํ์ ํ pass through ๋น ์ต๋ ํ ๋ฒ ์ผ์ด๋๋ค.
- ๊ตํ์ ์์ ์ ํ ์๋ ์๋ค.
4. ์์ ๋ฌด์ํ๊ธฐ
- ํ์ง๋ง ๋น
์ค ํ๊ธฐ๋ฒ์์๋ ์ ํ ์ ๋ ฌ๊ณผ ๋ฒ๋ธ ์ ๋ ฌ์ ์ ํํ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ค๋ช
ํ๋ค.
- ์ฆ, ๋น
์ค ํ๊ธฐ๋ฒ์ ์์๋ฅผ ๋ฌด์ํ๋ค.
5. ๋น
์ค ์นดํ
๊ณ ๋ฆฌ
- ๋น
์ค ํ๊ธฐ๋ฒ์ ์ผ๋ฐ์ ์ธ ์นดํ
๊ณ ๋ฆฌ์ ์๊ณ ๋ฆฌ์ฆ ์๋๋ง ๊ณ ๋ คํ๋ค.
- O(N) ์๊ณ ๋ฆฌ์ฆ๊ณผ O(N^2) ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ ์ฐจ์ด๋ ๋๋ฌด ํฌ๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ์๊ณ ๋ฆฌ์ฆ์ ๋ณต์ก๋๊ฐ O(100N), O(N^2/4)์ด๋ ๋ณ๋ก ์ค์ํ์ง ์๋ค.
- ๊ทธ๋์ O(N)๊ณผ O(N^2)๋ ๋ณ๊ฐ์ ์นดํ
๊ณ ๋ฆฌ๋ก ๋๋๋ค.
- ํ์ง๋ง ์๊ธฐ ์ด์ ๋ก, ๊ฐ์ ์นดํ
๊ณ ๋ฆฌ์ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๋ ์๋ก ์ฒ๋ฆฌ ์๋๊ฐ ๋ค๋ฅผ ์ ์๋ค.
6. ๋ง๋ฌด๋ฆฌ
- ์ด์ ๋น
์ค๋ฅผ ์ฌ์ฉํ์ฌ ์๊ณ ๋ฆฌ์ฆ์ด ๋์ฒด๋ก ์ผ๋ง๋ ํจ์จ์ ์ธ์ง ์ ์ ์๊ณ , ๋น
์ค์์ ๊ฐ์ ๋ถ๋ฅ์ ์ํ๋ ๋ ์๊ณ ๋ฆฌ์ฆ(๋ฒ๋ธ ์ ๋ ฌ๊ณผ ์ ํ์ ๋ ฌ)๋ ๋น๊ตํด ๋ณด์๋ค.
- ๊ทธ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ ๋น๊ตํ ๋ ๊ณ ๋ คํด์ผ ํ ์ค์ํ ์์ธ์ด ๋ ์๋ค.
- ์ ์์ ๋ฐ๋ฅด๋ฉด ์ต์
์ ์๋๋ฆฌ์ค๋ ํญ์ ์ผ์ด๋์ง ์๋๋ค.
- ๋์ฒด๋ก ์ผ์ด๋๋ ์๋๋ฆฌ์ค๋ ํ๊ท ์๋๋ฆฌ์ค๋ค.
- 6์ฅ์์๋ ๋ชจ๋ ์๋๋ฆฌ์ค๋ฅผ ๊ณ ๋ คํ๋ ๋ฐฉ๋ฒ์ ์์๋ณธ๋ค.