์๊ณ ๋ฆฌ์ฆ - ๋ฒ๋ธ ์ ๋ ฌ (Bubble Sort)
์๋ ํ์ธ์, ์๊ณ ๋ฆฌ์ฆ์ ์ ๋ฆฌํ๋ ํฌ์คํ ์ ๋๋ค. ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ์ฐธ๊ณ ํ์๋ ค๋ฉด ํด๋น ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ด์ฉํด์ฃผ์ธ์. ๐
๋ฒ๋ธ ์ ๋ ฌ (Bubble Sort)
๋ฒ๋ธ ์ ๋ ฌ์ ์ธ์ ํ ๋ ์์๋ฅผ ๋น๊ตํด ์๋ฆฌ๋ฅผ ๋ฐ๊ฟ๋๊ฐ๋ฉด์ ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
์๊ฐ ๋ณต์ก๋ : O(N^2)
๊ณต๊ฐ ๋ณต์ก๋ : O(N)
์์ ์ ๋ ฌ
๊ณผ์
- ์ฒซ ๋ฒ์งธ ์์๋ถํฐ ๋ง์ง๋ง ์์๊น์ง ์ฐจ๋ก๋๋ก ์ธ์ ํ ์์๋ฅผ ๋น๊ตํฉ๋๋ค.
- ์๋ก ๋น๊ตํ์ฌ ์ ์์๊ฐ ๋ ํฌ๋ค๋ฉด ์๋ก ์์น๋ฅผ ๊ตํํด์ค๋๋ค.
- ์ด๋ ๊ฒ ํ ์ฌ์ดํด์ด ์๋ฃ๊ฐ ๋๋ฉด, ํด๋น ์ฌ์ดํด์ ๋ง์ง๋ง์ ์์น์ํจ ์์๋ ์ ๋ ฌ์ด ์๋ฃ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. (์ค์ : ์๋์์ ์ค๋ช )
Code
์์์ ์ค๋ช ํ ๊ณผ์ ์ ์์๋๋ก ์ฝ๋๋ก ํํํด๋ณด๊ฒ ์ต๋๋ค.
1. ๋จผ์ ์ฒซ ๋ฒ์งธ ์์๋ถํฐ ๋ง์ง๋ง ์์๊น์ง ์ฐจ๋ก๋๋ก ์ธ์ ํ ์์๋ฅผ ๋น๊ตํฉ๋๋ค.
1๋ฒ ๊ณผ์ ์ ์ฝ๋๋ก ์ฎ๊ธฐ๊ธฐ ์ ์ ํด๋น ์ฌ์ดํด์ ์ด ๋ช ๋ฒ์ด ๋ฐ๋ณต๋์ด์ผ ํ ๊น์? ๋ฐ๋ก N-1๋ฒ์ ๋๋ค. ๋ง์ง๋ง ์์๋ ๋น๊ตํ ๋์์ด ์๊ธฐ ๋๋ฌธ์ -1์ ํด์ค ๊ฒ์ ๋๋ค.
3๋ฒ ๊ณผ์ ์ ๋ณด๋ฉด ํ ์ฌ์ดํด์ด ๋๋๋ฉด ๋ง์ง๋ง ์์๋ ์ด๋ฏธ ์ ๋ ฌ์ด ์๋ฃ๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ ๊ตณ์ด ์ ๋ ฌ์ด ์๋ฃ๋ ์์๋ฅผ ํ์ํ ํ์๊ฐ ์์ต๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฒ์๋ ์๋์ ๊ฐ์ด ๋ฉ๋๋ค.
for(int i=1; i < N; i++) {
for(int j=0; j<N-i; j++) {
// ์ฒซ ๋ฒ์งธ ์์๋ถํฐ ๋ง์ง๋ง-i ์์๊น์ง ๋น๊ต!
}
}
์ ์ฒด์ ์ผ๋ก ์ฌ์ดํด์ N-1๋ฒ ๋ฐ๋ณต๋๊ณ , ๋ด๋ถ์ for๋ฌธ์ ์ฒซ ๋ฒ์งธ ์์๋ถํฐ N-i ๋ฒ์งธ ์์๊น์ง ๋น๊ต๋ฅผ ํด๋๊ฐ๋ฉด ๋๊ฒ ์ต๋๋ค.
2. ์๋ก ๋น๊ตํ์ฌ ์ ์์๊ฐ ๋ ํฌ๋ค๋ฉด ์์น๋ฅผ ๊ตํํด์ค๋๋ค.
if( arr[j] > arr[j+1] ) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
์ ์ฒด ์ฝ๋
public void bubble_Sort(int[] arr) {
int temp = 0;
int N = arr.length;
for(int i=1; i<N; i++) {
for(int j=0; j<N-i; j++) {
if(arr[j] > arr[j+1]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}