๋ชฉ์ฐจ
- ๋น ์ค๋ ์๊ณ ๋ฆฌ์ฆ์ ๋น๊ตํ๊ณ ์ฃผ์ด์ง ์ํฉ์ ์๋ง์ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฐ์ ํ๊ฒ ํด ์ฃผ๋ ์ข์ ๋๊ตฌ์ด์ง๋ง, ์ ์ผํ ๋๊ตฌ๋ ์๋๋ค.
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์ฅ์์๋ ๋ชจ๋ ์๋๋ฆฌ์ค๋ฅผ ๊ณ ๋ คํ๋ ๋ฐฉ๋ฒ์ ์์๋ณธ๋ค.
'๐๏ธ ์ฑ & ๊ฐ์ ์ ๋ฆฌ > ๐๏ธ ๋๊ตฌ๋ ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
8์ฅ ํด์ ํ ์ด๋ธ๋ก ๋งค์ฐ ๋น ๋ฅธ ๋ฃฉ์ (0) | 2022.11.18 |
---|---|
6์ฅ ๊ธ์ ์ ์ธ ์๋๋ฆฌ์ค ์ต์ ํ (0) | 2022.11.04 |
4์ฅ ๋น ์ค๋ก ์ฝ๋ ์๋ ์ฌ๋ฆฌ๊ธฐ (0) | 2022.11.02 |
3์ฅ ๋น ์ค ํ๊ธฐ๋ฒ (0) | 2022.10.29 |
2์ฅ ์๊ณ ๋ฆฌ์ฆ์ด ์ค์ํ ๊น๋ญ (1) | 2022.10.29 |
- ๋น ์ค๋ ์๊ณ ๋ฆฌ์ฆ์ ๋น๊ตํ๊ณ ์ฃผ์ด์ง ์ํฉ์ ์๋ง์ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฐ์ ํ๊ฒ ํด ์ฃผ๋ ์ข์ ๋๊ตฌ์ด์ง๋ง, ์ ์ผํ ๋๊ตฌ๋ ์๋๋ค.
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์ฅ์์๋ ๋ชจ๋ ์๋๋ฆฌ์ค๋ฅผ ๊ณ ๋ คํ๋ ๋ฐฉ๋ฒ์ ์์๋ณธ๋ค.
'๐๏ธ ์ฑ & ๊ฐ์ ์ ๋ฆฌ > ๐๏ธ ๋๊ตฌ๋ ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
8์ฅ ํด์ ํ ์ด๋ธ๋ก ๋งค์ฐ ๋น ๋ฅธ ๋ฃฉ์ (0) | 2022.11.18 |
---|---|
6์ฅ ๊ธ์ ์ ์ธ ์๋๋ฆฌ์ค ์ต์ ํ (0) | 2022.11.04 |
4์ฅ ๋น ์ค๋ก ์ฝ๋ ์๋ ์ฌ๋ฆฌ๊ธฐ (0) | 2022.11.02 |
3์ฅ ๋น ์ค ํ๊ธฐ๋ฒ (0) | 2022.10.29 |
2์ฅ ์๊ณ ๋ฆฌ์ฆ์ด ์ค์ํ ๊น๋ญ (1) | 2022.10.29 |