๋ฒ๋ธ ์ ๋ ฌ (Bubble Sort) ์๊ณ ๋ฆฌ์ฆ :
์๋ก ์ด์ํ ๋ ์์์ ๋์ ๊ด๊ณ๋ฅผ ๋น๊ตํ์ฌ ๊ตํ์ ๋ฐ๋ณตํ๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
์์์ ๊ฐ์๊ฐ n๊ฐ์ธ ๋ฐฐ์ด์ ์ด n-1ํ์ ํจ์ค๋ฅผ ๊ฑฐ์น๋ฉฐ, i๋ฒ์งธ ํจ์ค์์ ๊ฐ๊ฐ n-i๋ฒ์ ์ ๋ ฌ์ ์ํํ๋ค
( ํจ์ค์ ํ์๊ฐ n-1ํ์ธ ์ด์ ๋ n-1ํ์ ์ ๋ ฌ์ด ๋๋๋ฉด ๋ง์ง๋ง ์์ ํ๋๊ฐ ๋จ๋๋ฐ, ์ด๋ฏธ ์ ๋ ฌ๋ ์ํ์ด๊ธฐ ๋๋ฌธ )
int[] bubble = {6, 4, 5, 1, 2}
1. ์ฒซ๋ฒ์งธ ํจ์ค : bubble[0] ~ bubble[4] ์ค ๊ฐ์ฅ ํฐ ์์๊ฐ ๋งจ ๋ค๋ก ์ด๋
1-1. bubble[0]๊ณผ bubble[1]์ ๋น๊ต, bubble[0]์ด bubble[1]๋ณด๋ค ํฌ๋ฏ๋ก ๊ตํ {4, 6, 5, 1, 2}
1-2. bubble[1]๊ณผ bubble[2]์ ๋น๊ต, bubble[1]์ด bubble[2]๋ณด๋ค ํฌ๋ฏ๋ก ๊ตํ {4, 5, 6, 1, 2}
1-3. bubble[2]๊ณผ bubble[3]์ ๋น๊ต, bubble[2]์ด bubble[3]๋ณด๋ค ํฌ๋ฏ๋ก ๊ตํ {4, 5, 1, 6, 2}
1-4. bubble[3]๊ณผ bubble[4]์ ๋น๊ต, bubble[3]์ด bubble[4]๋ณด๋ค ํฌ๋ฏ๋ก ๊ตํ {4, 5, 1, 2, 6}
2. ๋๋ฒ์งธ ํจ์ค : bubble[0] ~ bubble[3] ์ค ๊ฐ์ฅ ํฐ ์์๊ฐ ๋งจ ๋ค๋ก ์ด๋
2-1. bubble[0]๊ณผ bubble[1]์ ๋น๊ต, bubble[0]์ด bubble[1]๋ณด๋ค ์์ผ๋ฏ๋ก ๊ตํX {4, 5, 1, 2, 6}
2-2. bubble[1]๊ณผ bubble[2]์ ๋น๊ต, bubble[1]์ด bubble[2]๋ณด๋ค ํฌ๋ฏ๋ก ๊ตํ {4, 1, 5, 2, 6}
2-3. bubble[2]๊ณผ bubble[3]์ ๋น๊ต, bubble[2]์ด bubble[3]๋ณด๋ค ํฌ๋ฏ๋ก ๊ตํ {4, 1, 2, 5, 6}
3. ์ธ๋ฒ์งธ ํจ์ค : bubble[0] ~ bubble[2] ์ค ๊ฐ์ฅ ํฐ ์์๊ฐ ๋งจ ๋ค๋ก ์ด๋
3-1. bubble[0]๊ณผ bubble[1]์ ๋น๊ต, bubble[0]์ด bubble[1]๋ณด๋ค ํฌ๋ฏ๋ก ๊ตํ {1, 4, 2, 5, 6}
3-2. bubble[1]๊ณผ bubble[2]์ ๋น๊ต, bubble[1]์ด bubble[2]๋ณด๋ค ํฌ๋ฏ๋ก ๊ตํ {1, 2, 4, 5, 6}
4. ๋ค๋ฒ์งธ ํจ์ค : bubble[0] ~ bubble[1] ์ค ๊ฐ์ฅ ํฐ ์์๊ฐ ๋งจ ๋ค๋ก ์ด๋
3-1. bubble[0]๊ณผ bubble[1]์ ๋น๊ต, bubble[0]์ด bubble[1]๋ณด๋ค ์์ผ๋ฏ๋ก ๊ตํX {1, 2, 4, 5, 6}
์ฒซ๋ฒ์งธ ํจ์ค๊ฐ ์๋ฃ๋๋ฉด ๊ฐ์ฅ ํฐ ์์๊ฐ ๋งจ ๋ค๋ก ์ด๋ํ๊ธฐ ๋๋ฌธ์
๋๋ฒ์งธ ํจ์ค๋ ๋งจ ๋์ ์์๋ฅผ ์ ์ธํ๊ณ ์งํ๋๊ณ ,
๋๋ฒ์งธ ํจ์ค๊ฐ ์๋ฃ๋๋ฉด ๋๋ฒ์งธ๋ก ํฐ ์์๊ฐ ๋งจ ๋ค์์ ๋๋ฒ์งธ๋ก ์ด๋ํ๊ธฐ ๋๋ฌธ์
์ธ๋ฒ์งธ ํจ์ค๋ ๋งจ ๋์ ๋ ์์๋ฅผ ์ ์ธํ๊ณ ์งํ๋๋ค.
=> ํจ์ค๊ฐ ํ๋ฒ์ฉ ์งํ๋ ๋ ๋ง๋ค ์ ๋ ฌ์์ ์ ์ธ๋๋ ๋ฐ์ดํฐ๊ฐ ํ๋์ฉ ๋์ด๋๋ค.
๋ฉ์๋ swap() : a[idx1] ๊ณผ a[idx2] ๋ฅผ ๊ตํ
๋งค๊ฐ๋ณ์ : int[] a, int idx1, int idx2
๋ฉ์๋ bubbleSort() : ๊ธธ์ด๊ฐ n์ธ ๋ฐฐ์ด a๋ฅผ ๋ฒ๋ธ ์ ๋ ฌ
๋งค๊ฐ๋ณ์ : int[] a, int n
- ๋ฒ๋ธ ์ ๋ ฌ (1) : ์ค๊ฐ์ ์ ๋ ฌ์ด ์๋ฃ๋ ์ํ๊ฐ ๋์ด๋ ๋๊น์ง ๋น๊ต ์ํ
void swap(int[] a, int idx1, int idx2) {
int t = a[idx1];
a[idx1] = a[idx2];
a[idx2] = t;
}
void bubbleSort(int[] a, int n) {
for(int i = 0; i < n-1; i++) {
for(int j = 0; j < n-i-1; j++) {
if(a[j] > a[j+1]) {
swap(a, j, j+1);
}
}
}
}
- ๋ฒ๋ธ ์ ๋ ฌ (2) : ์ค๊ฐ์ ์ ๋ ฌ์ด ์๋ฃ๋ ์ํ๊ฐ ๋๋ฉด ๋์ด์ ๋น๊ตํ์ง ์๊ณ ์ข ๋ฃ
( ํ ํจ์ค์์ ๊ตํ ํ์๊ฐ 0์ด๋ฉด ๋ ์ด์ ์ ๋ ฌ ํ ์์๊ฐ ์๋ค๋ ๋ป์ด๊ธฐ ๋๋ฌธ์, ๋ณ์ exchg ๋ฅผ ์ถ๊ฐํ์ฌ ๊ตํ์ด ์ผ์ด๋ฌ๋์ง ์ฒดํฌํ๊ณ ๊ตํ ํ์๊ฐ 0์ด๋ฉด ์ข ๋ฃ )
void swap(int[] a, int idx1, int idx2) {
int t = a[idx1];
a[idx1] = a[idx2];
a[idx2] = t;
}
void bubbleSort(int[] a, int n) {
for(int i = 0; i < n-1; i++) {
int exchg = 0;
for(int j = 0; j < n-i-1; j++) {
if(a[j] > a[j+1]) {
swap(a, j, j+1);
exchg++;
}
}
if (exchg == 0) {
break;
}
}
}
- ๋ฒ๋ธ ์ ๋ ฌ (3) : ํ ํจ์ค ์์์ ์ค๊ฐ์ ์ ๋ ฌ์ด ๋ ์ด์ ์ผ์ด๋์ง ์์ผ๋ฉด ๋ค์ ํจ์ค์์ ์ ๋ ฌ์ด ์ผ์ด๋ ๋ถ๋ถ๊น์ง๋ง ์ ๋ ฌ
( ํ ํจ์ค ์์์ ์ค๊ฐ a[j] ์ดํ์ ์ ๋ ฌ์ด ๋ ์ด์ ์ผ์ด๋์ง ์์ผ๋ฉด a[j+1] ์ดํ๋ ๋ ์ด์ ์ ๋ฆฌํ ์์๊ฐ ์๋ค๋ ๋ป์ด๊ธฐ ๋๋ฌธ์, ๋ณ์ last ๋ฅผ ์ถ๊ฐํ์ฌ j๋ฅผ ์ ์ฅ, ๋ค์ ํจ์ค์์ j-1 ๊น์ง๋ง ์ ๋ ฌ์ ์งํํ๋๋ก ํ๋ค. )
void swap(int[] a, int idx1, int idx2) {
int t = a[idx1];
a[idx1] = a[idx2];
a[idx2] = t;
}
void bubbleSort(int[] a, int n) {
int k = n - 1;
while(k > 0) {
int last = 0;
for(int j = 0; j < k; j++) {
if(a[j] > a[j+1]) {
swap(a, j, j+1);
last = j;
}
}
k = last;
}
}
๋ฒ๋ธ ์ ๋ ฌ Bubble Sort :
์ต์ = ํ๊ท = ์ต์ = O(N^2)
์์ ํ ์ ๋ ฌ