๐ก์์์ ๋ํ ๊ฐ์
- ์ ๋ ฅ ํฌ๊ธฐ n
- ์ ๋ ฅ ๋ฐฐ์ด A[0…. n-1]
- ์ ๋ ฅ ๋ฐ์ดํฐ : ์์ ์ ์
- ์ ๋ ฌ ๋ฐฉ์ : ์ค๋ฆ์ฐจ์ (1, 2, 3, 4,…)
2-1) ์ ํ ์ ๋ ฌ (Selection sort)
- ์ ๋ ฅ ๋ฐฐ์ด์์ ๊ฐ์ฅ ์์ ๊ฐ๋ถํฐ ์์๋๋ก ์ ํํด์ ๋์ดํ๋ ๋ฐฉ์
- ์ ๋ ฌ ๊ณผ์
๐๋ฐฐ์ด A = [60, 90, 30, 10]
(0๋จ๊ณ) 1. ๋ฏธ์ ๋ ฌ ๋ถ๋ถ์์ ์ต์๊ฐ์ ์ฐพ์ = 10 A = [60, 90, 30, 10] 2. ์ด ์ต์๊ฐ๊ณผ ๋ฏธ์ ๋ ฌ ๋ถ๋ถ์ ์ฒซ ๋ฒ์งธ ๋ฐ์ดํฐ[60] ๋น๊ต 10 ๊ณผ 60 ๋น๊ต : 10 ์ 60๋ณด๋ค ์๋ค. (์กฐ๊ฑด ๋ง์กฑ) A = [60, 90, 30, 10] 3. ์กฐ๊ฑด๋ง์กฑ ์, ์์น๋ฅผ ๊ตํ -> ์ด ๊ณผ์ ์ ๋ฐ๋ณต |
A = [10, 90, 30, 60] ๋ฏธ์ ๋ ฌ ๋ถ๋ถ์์ ์ ๋ ฌ ์์ (1๋จ๊ณ) ์ต์๊ฐ 30, ๋ฏธ์ ๋ ฌ ์ฒซ ๋ฒ ์งธ ๊ฐ 90 ๋น๊ต A = [10, 90, 30, 60] A = [10,30, 90, 60] (2๋จ๊ณ) ์ต์๊ฐ 60, ๋ฏธ์ ๋ ฌ ์ฒซ ๋ฒ ์งธ ๊ฐ 90 ๋น๊ต A = [10, 30, 90, 60] A = [10, 30, 60, 90] (๊ฒฐ๊ณผ) A = [10, 30, 60, 90] ๋ฐ์ดํฐ ๊ฐฏ์ : 4๊ฐ ์ด ๋น๊ต ํ์ : 4๋ฒ = (n-1) - i = (4 - 1) - 0 = 3 |
3. ํน์ง
- ์ฑ๋ฅ : O(n²)
- ์
๋ ฅ ๋ฐ์ดํฐ์ ์์์ ๋ฏผ๊ฐํ์ง ์์
→ ํญ์ (n-1) - i ๋ฒ์ ๋น๊ต๊ฐ ํ์ (ํญ์ ์ต์๊ฐ ์ฐพ์์ ๋น๊ต)
→ ์ธ์ ๋ ๋์ผํ ์๊ฐ ๋ณต์ก๋ - ์ ์๋ฆฌ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ : ์ ๋ ฅ ๋ฐฐ์ด A์ด์ธ ์์๊ฐ(i, j, min, tmp)์ ์ ์ฅ ๊ณต๊ฐ๋ง ํ์
- ์์ ์ ์ด์ง ์์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ : ๋์ผํ ๊ฐ์ ๊ฐ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ, ๊ฒฐ๊ณผ์ ์ผ๋ก ์์น๊ฐ ๋ฐ๋
[JS code]
function selectionSort(A) {
const n = A.length;
for (let i = 0; i < n - 1; i++) { // (n-1)๋ฒ ๋ฐ๋ณต
// ์ต์๊ฐ์ ์ธ๋ฑ์ค๋ฅผ i๋ก ์ค์ ํฉ๋๋ค.
let min = i;
for (let j = i + 1; j < n; j++) {
// 1. A[i..n-1]์์ ์ต์๊ฐ ์ฐพ๊ธฐ
// ๋ง์ฝ ์ต์๊ฐ A[min]์ด A[j]๋ณด๋ค ํฌ๋ค๋ฉด
if (A[min] > A[j]) {
// min์ j๋ก ๊ฐฑ์
min = j;
}
}
//2. A[i]์ A[min]์ ์์น๋ฅผ ๊ตํํฉ๋๋ค.
// A[i]๋ฅผ ์์๋ก ์ ์ฅํฉ๋๋ค.
let temp = A[i];
// 2. A[i]๋ฅผ ์ต์๊ฐ๊ณผ A[min]์ผ๋ก ๊ต์ฒด
A[i] = A[min];
//์์๋ก ์ ์ฅํ ๊ฐtemp์ A[min]์ ๋์
A[min] = temp;
}
return A;
}
๋ฐ์ํ
๋๊ธ