์ฝ๋ฉ ํ
์คํธ/์๊ณ ๋ฆฌ์ฆ
JavaScript๋ก ์์๋ณด๋ ์ฝ์ ์ ๋ ฌ(Insertion Sort)๊ณผ ์์ ์ฝ๋
์ฉ๋ฝ
2023. 10. 12. 17:35
๋ฐ์ํ
์๊ฐ
๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋์ ๋๋ค.
๋ฐฐ์ด์ ์์๋ฅผ ์์๋๋ก ํ์ํ๋ฉฐ, ๊ฐ ์์๋ฅผ ์ด๋ฏธ ์ ๋ ฌ๋ ๋ฐฐ์ด ๋ถ๋ถ๊ณผ ๋น๊ตํ์ฌ ์ ์ ํ ์์น์ ์ฝ์ ํ๋ ๋ฐฉ์์ผ๋ก ์ ๋ ฌ์ ์งํํฉ๋๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ค๋ฅธ ๊ณ ๊ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ์ฑ๋ฅ์ด ๋จ์ด์ง๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ํฐ ๋ฐฐ์ด์ด๋ ์๊ฐ์ ํ์ด ์๋ ๊ฒฝ์ฐ์๋ ๋ค๋ฅธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์์ ์ฝ๋
// ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ
function insertionSort(array) {
for (let i = 1; i < array.length; i++) {
let current = array[i];
let j = i - 1;
while (j >= 0 && array[j] > current) {
array[j + 1] = array[j];
j--;
}
array[j + 1] = current;
}
return array;
}
// ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ
function insertionSort(arr) {
for (let i = 1; i < arr.length; i++) {
for (let j = i; j > 0; j--) {
// ์ธ๋ฑ์ค j๋ถํฐ 1๊น์ง 1์ฉ ๊ฐ์ํ๋ฉฐ ๋ฐ๋ณต
if (arr[j] < arr[j - 1]) {
// ํ ์นธ์ฉ ์ผ์ชฝ์ผ๋ก ์ด๋
// swap
[arr[j], arr[j - 1]] = [arr[j - 1], arr[j]];
} else {
// ์๊ธฐ๋ณด๋ค ์์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ฉด ๊ทธ ์์น์์ ๋ฉ์ถค
break;
}
}
}
}
- ๋ฐฐ์ด์ ๋ ๋ฒ์งธ ์์๋ถํฐ ์์ํ์ฌ, ์ฒซ ๋ฒ์งธ ์์์ ๋น๊ตํฉ๋๋ค.
- ์ฒซ ๋ฒ์งธ ์์๋ณด๋ค ์์ ๊ฒฝ์ฐ, ์ฒซ ๋ฒ์งธ ์์์ ์์น๋ฅผ ๊ตํํฉ๋๋ค.
- ์ธ ๋ฒ์งธ ์์๋ถํฐ ์์ํ์ฌ, ์ด๋ฏธ ์ ๋ ฌ๋ ๋ฐฐ์ด ๋ถ๋ถ์์ ์์ ์ ์์น๋ฅผ ์ฐพ์ ์ฝ์ ํฉ๋๋ค.
- ๋ฐฐ์ด ์ ์ฒด๋ฅผ ํ์ํ๋ฉด์ 2 ~ 3 ๋จ๊ณ๋ฅผ ๋ฐ๋ณตํฉ๋๋ค.
์๊ฐ ๋ณต์ก๋
์ฝ์ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋๋ O(N^2)์ ๋๋ค.
ํ์ง๋ง ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ์์ ๊ฒฝ์ฐ์๋ ๋ค๋ฅธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ๋น ๋ฅผ ์ ์์ผ๋ฉฐ, ์ด๋ฏธ ์ ๋ ฌ๋ ๋ฐฐ์ด์ ๋ํด์๋ ์ต์ ์ ๊ฒฝ์ฐ O(N)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
๋ฐ์ํ