๋ฒ๋ธ ์ ๋ ฌ์ ๊ฐ๋
๋ฒ๋ธ ์ ๋ ฌ์ด๋?
์๋ก ์ธ์ ํ ๋ ์์์ ๋์๋ฅผ ๋น๊ตํ๊ณ , ๋ ์์์ ์์น๊ฐ ๋ฐ๋์ด์ผ ํ๋ค๋ฉด ์๋ฆฌ๋ฅผ ๊ตํํ๋ฉฐ ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ ํ ์ ๋ ฌ๊ณผ ๊ธฐ๋ณธ ๊ฐ๋ ์ด ์ ์ฌํ์ง๋ง, ๋ฒ๋ธ์ ๋ ฌ์ ์ ํ์ ๋ ฌ๊ณผ ๋ค๋ฅด๊ฒ SWAP์ด ๊ณ์์ ์ผ๋ก ์ผ์ด๋๋ค.
๋ฒ๋ธ ์ ๋ ฌ์ ๋์ ๋ฐฉ์๊ณผ ๊ตฌํ
๋์ ๋ฐฉ์
1. n-1๊ฐ์ ๋ฐ์ดํฐ์ ์์น๋ง ์ฐพ์ผ๋ฉด ๋๋ฏ๋ก n-1๋ฒ ๋ฐ๋ณตํ๋ค. (n-1๊ฐ์ ๋ฐ์ดํฐ์ ์์น๊ฐ ์ ํด์ง๋ฉด ๋๋จธ์ง 1๊ฐ๋ ์๋ ์ ๋ ฌ)
1-1. ์์์๋ถํฐ ๋ฒ๋ธ์ฒ๋ผ ์ฌ๋ผ๊ฐ๋ฉฐ 2๊ฐ์ ๋ฐ์ดํฐ์ฉ ์ง์ง์ด ๋น๊ตํ๋ค.
1-1-1. 2๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ์ฌ ์์น๊ฐ ๋ฐ๋์ด์ผ ํ๋ค๋ฉด SWAPํ๋ค.
1๋ฒ์ ํ๋ฒ ๋ฐ๋ณตํ ๋๋ง๋ค ์ ๋ ฌ๋์ง ์์ ๋ฐ์ดํฐ๋ค ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ด ๋ค๋ก ์ด๋ํ๋ค. (์ฆ, ๋ฐ๋ณต ํ๋ฒ ๋น ํ๋์ ๋ฐ์ดํฐ๊ฐ ๋ฌด์กฐ๊ฑด ์ ๋ ฌ๋จ)
๊ตฌํ
for(var i=array.length-1; i>=0; i--) {
for(var j=0; j<i; j++) {
if(array[j] > array[j+1]) {
SWAP(j, j+1);
}
}
}
function SWAP(x, y) {
var temp = array[x]
array[x] = array[y];
array[y] = temp;
}
์ฌ์ฌํด์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ตฌํ!
Big-O
๋น๊ต ํ์
- ์ต์, ์ต์ , ํ๊ท ๋ชจ๋ ์ผ์ ํจ (์ ๋ ฌ์ด ๋์ด์๋ ์๋๋ ํญ์ 2๊ฐ์ ์์๋ฅผ ๋น๊ตํ๊ธฐ ๋๋ฌธ์)
- n-1, n-2, ...., 2, 1 ๋ฒ ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ์ด n(n-1)/2๋ฒ ์ผ์ด๋จ
๊ตํ ํ์
- ๋ง์ฝ ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ์ญ์์ผ๋ก ๋์ด๋์ด ์๋ ๊ฒฝ์ฐ, SWAP ์ฐ์ฐ์ ๋น๊ต ํ์๋งํผ ์ผ์ด๋จ
- SWAP ์ฐ์ฐ์ 3๋ฒ์ ์ด๋์ด ํ์ํ๋ฏ๋ก ์ด ์ฐ์ฐ ์๋ 3 * n(n-1)/2
- ๋ฐ๋ผ์ T(n) = O(n^2)
๋ฒ๋ธ ์ ๋ ฌ์ ์ฅ๋จ์
์ฅ์
- ์๊ณ ๋ฆฌ์ฆ ์์ฒด๊ฐ ๋งค์ฐ ๊ฐ๋จํ๋ฏ๋ก ๋ค๋ฅธ ๋ณต์กํ ์ ๋ ฌ ๋ฐฉ๋ฒ๋ณด๋ค ๊ตฌํ์ด ๋งค์ฐ ๊ฐ๋จํ๋ค.
- ๋ฐฐ์ด ์์์ ๊ตํํ๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ์ง ์๋ค.
- Stable Sort์ด๋ค.
๋จ์
- ์ธ์ ํ ์์์ ๋น๊ต ํ ๋ฐ๋ก SWAP์ด ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ๋ง์ SWAP ์ฐ์ฐ์ด ์ํ๋๋ค.