์๊ฐ
๋ฒ๋ธ ์ ๋ ฌ(Bubble Sort)์ ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ๊ธฐ๋ณธ์ ์ธ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋๋ก, ์ด๋ฆ์์๋ ์ ์ ์๋ฏ์ด ๋ฐฐ์ด์ ์์๋ฅผ '๊ฑฐํ(Bubble)'์ฒ๋ผ ์๋ก ๊ตํํด ๊ฐ๋ฉฐ ์ ๋ ฌํ๋ ๋ฐฉ์์ ๋๋ค.
์ฆ, ์๋ก ์ธ์ ํ ๋ ์์๋ฅผ ๋น๊ตํด๊ฐ๋ฉฐ ์ค๋ฆ์ฐจ์์ด๋ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ์ ์งํํฉ๋๋ค.
๊ธฐ๋ณธ ๊ฐ๋
๋ฒ๋ธ ์ ๋ ฌ์ ๊ฐ๋ ์ ๋ง์ฝ ์ซ์ ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ์ํฉ์์ ๋ ํฐ ์ซ์๊ฐ ํ ๋ฒ์ ํ๋์ฉ ๋ค๋ก ์ด๋ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ค ํญ๋ชฉ์ด ๋ ํฌ๋ฉด ๊ตํํ๊ณ , ๋ค์ ํญ๋ชฉ๊ณผ ๋น๊ตํ๊ณ , ๋ค์ ํญ๋ชฉ๋ณด๋ค ๋ ํฌ๋ฉด ๋ ๊ตํ์ ํ๊ณ , ๋ค์ ๋ค์ ํญ๋ชฉ๊ณผ ๋น๊ตํ๋ฉด์ ๋ฐ๋ณต์ ํฉ๋๋ค.
์ค๋ฆ์ฐจ์์ ์ํฉ์์๋ ๊ฐ์ฅ ํฐ ๊ฐ์ด ์๋จ์ ํฅํด์ ๊ฐ์ ์ ๋ ฌํ๋ ๋ฐฉ์์ผ๋ก ๋ชฉ๋ก์ ๋ง๋ญ๋๋ค.
์์ ์ฝ๋ #1
function bubbleSort(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return arr;
}
๊ธฐ๋ณธ์ ์ธ ๋ฒ๋ธ ์ ๋ ฌ ์ฝ๋์ ๋๋ค.
ํด๋น ์ฝ๋๋ ์ด์ค ๋ฐ๋ณต๋ฌธ์ ํตํด์ ์ธ์ ํ ์์์ ๋ํด์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๋ฉฐ ์์น๋ฅผ ๋ฐ๊พธ๋ฉด์ ์ ๋ ฌ์ ์งํํฉ๋๋ค.
ํ์ง๋ง ์ด ์ฝ๋๋ ์ด๋ฏธ ์ ๋ ฌ์ด ๋ ์ํ์์๋ ๋ฒ๋ธ ์ ๋ ฌ์ด ์๋ํ๋ ์๋ฆฌ ๋๋ฌธ์ ๋ ๋ถ๋ถ์ index๊ฐ ์๋ ๊ณณ๊ณผ ๋น๊ตํด์ undifined์ ๋ฌด์๋ฏธํ ๋น๊ต๋ฅผ ํ๊ณ , ์ด๋ฏธ ์ ๋ ฌ์ด ๋ ์ํ์์๋ ๋ถํ์ํ ์ฐ์ฐ์ ํ ๋ฐ๋ณต๋ฌธ์ ๋๊ฒ ๋ฉ๋๋ค.
์ฆ, j < arr.length ์กฐ๊ฑด ๋๋ฌธ์ arr[j + 1]๊ฐ ๋ฐฐ์ด ๋ฒ์๋ฅผ ์ด๊ณผํ๋ ๊ฒฝ์ฐ๊ฐ ์๊น๋๋ค.
๊ทธ๋์ ๋ง์ง๋ง ์์์ undefined๋ฅผ ๋น๊ตํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ด๋ ๊ฒ ๋๋ฉด ๋ถํ์ํ ์ฐ์ฐ์ ์ํํ๊ฒ ๋ฉ๋๋ค.
์ต์ ํ๋ ์ฝ๋
function bubbleSort(arr) {
let noSwaps;
for (let i = arr.length; i > 0; i--) {
noSwaps = true;
for (let j = 0; j < i - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
noSwaps = false;
}
}
if (noSwaps) break;
}
return arr;
}
j < arr.length - i - 1๋ก ๋ง์ง๋ง ์์์ undefined๋ฅผ ๋น๊ตํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฒซ๋ฒ์งธ ์์ ์ฝ๋์์๋ ์ด๋ฏธ ์ ๋ ฌ์ด ๋ ์ํ์์๋ ๋ฐ๋ณต๋ฌธ์ด ๋๋ฉด์ ์ฐ์ฐ์ ์ํํ์ง๋ง ํด๋น ์ฝ๋๋ ๋ฐ๋ณต๋ฌธ์ด ์งํ๋๋ฉด์ ๊ตํ ์์ ์ด ์๋ค๋ฉด ๋ฐฐ์ด์ ์ด๋ฏธ ์ ๋ ฌ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๊ณ ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์, ๋ฐฐ์ด์ด ๊ฑฐ์ ์ ๋ ฌ๋ ์ํ๋ผ๋ฉด ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ๊ธธ์ด์ง์ ๋ฐ๋ผ ์ ์ฝ๋์๋ ์์ฃผ ํฐ ์ฐจ์ด๊ฐ ์๊น๋๋ค.
๋ฒ๋ธ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋(Big O)
๋ฐฐ์ด์ ๊ฐ ํญ๋ชฉ๋ง๋ค n๋ฒ์ ๋น๊ต๋ฅผ ํ๊ณ ๋ฐฐ์ด์ ๋ค๋ฅธ ๋ชจ๋ ํญ๋ชฉ ํ๋ํ๋ ๋น๊ตํ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ๋ฒ๋ธ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋๋ O(N^2)์ ๋๋ค.
๊ทธ๋ฌ๋ ๋ฐ์ดํฐ๊ฐ ๊ฑฐ์ ์ ๋ ฌ๋์๊ฑฐ๋ ์ด๋ฏธ ์ ๋ ฌ์ด ์๋ฃ๋ ์ํ์์ noSwaps ๋ณ์๊ฐ ์๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ ์๊ฐ(Linear Time)์ ๊ฐ๊น์์ง๋๋ค. ์๋ฅผ ๋ค์ด, [1, 2, 3, 4, 5]์ ๊ฐ์ ์ด๋ฏธ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ๋ฐฐ์ด์์๋ ์ฒซ ๋ฒ์งธ ํจ์ค ๋์ ์ด๋ ํ ๊ตํ๋ ๋ฐ์ํ์ง ์์ ์๊ณ ๋ฆฌ์ฆ์ด ์ฆ์ ์ข ๋ฃ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ด ๊ฒฝ์ฐ ๋ฒ๋ธ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋๋ O(N)์ผ๋ก ์ค์ด๋ค๊ฒ ๋ฉ๋๋ค.
๋ค๋ง ์ฃผ๋ชฉํด์ผ ํ ์ ์ ์ด๋ฌํ ์ต์ ํ ์ฌํญ๋ค์ '์ต์ '์ ๊ฒฝ์ฐ์ ํด๋นํ๋ฉฐ ์ผ๋ฐ์ ์ธ ์ํฉ์์ ๋ฒ๋ธ์ ๋ ฌ์ ์ฌ์ ํ O(N^2)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค๋ ๊ฒ์
๋๋ค.