๐ซง ๊ฑฐํ์ฒ๋ผ ์ซ์๊ฐ ๋ ์ค๋ฅด๋, ๋ฒ๋ธ ์ ๋ ฌ(Bubble Sort)
๋ฐ์ดํฐ๋ฅผ ์์๋๋ก ๋์ดํ๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ค ๊ฐ์ฅ ๊ธฐ์ด์ ์ด๋ฉด์ ์ง๊ด์ ์ธ ๋ฒ๋ธ ์ ๋ ฌ(Bubble Sort)์ ๋ํด ๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํด ๋ณด์์ต๋๋ค!!
๐ง ๋ฒ๋ธ ์ ๋ ฌ์ด๋?
๋ฒ๋ธ ์ ๋ ฌ์ ์ธ์ ํ ๋ ์์๋ฅผ ๋น๊ตํ๋ฉฐ ์กฐ๊ฑด์ ๋ง์ง ์์ ๊ฒฝ์ฐ ์๋ฆฌ๋ฅผ ๊ต์ฒดํ๋ ๋ฐฉ์์ด์์.
๋ง์น ์ฌ๋ฌ ์ฌ๋์ด ์ค์ ์ ์์ ๋,
๋งจ ์์ฌ๋๋ถํฐ ์์ํด ์ค์ง ๋ฐ๋ก ์ ์ฌ๋๊ณผ๋ง ํค๋ฅผ ๋น๊ตํ๋ฉฐ ๋ ํฐ ์ฌ๋์ด ๊ณ์ ๋ค๋ก ์ด๋ํ๋ ๋ฐ์ด๋ด๊ธฐ ๋ฐฉ์๊ณผ ๊ฐ์ต๋๋ค.
๐จ ๊ทธ๋ฆผ์ผ๋ก ๋ณด๋ ์ ๋ ฌ ์๋ฆฌ
๋ฒ๋ธ ์ ๋ ฌ์ ํต์ฌ์
๊ฐ์ฅ ํฐ ๊ฐ์ ๋ค๋ก ๋ฐ์ด๋ด๋ ๊ฒ!!

๐ป ์๋ฐ(Java) ๊ตฌํ ๋ฐ ์ต์ ํ
๋ฒ๋ธ ์ ๋ ฌ์ ๊ตฌํ์ด ๊ฐ๋จํ์ง๋ง, ๊ธฐ๋ณธ์ ์ผ๋ก $O(n^2)$์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋๋ค.
์๋ ์ฝ๋๋ ์ด๋ฏธ ์ ๋ ฌ์ด ์๋ฃ๋ ๊ฒฝ์ฐ ๋ถํ์ํ ๋ฐ๋ณต์ ํผํ๋๋ก swapped ๋ณ์๋ฅผ ํ์ฉํด ์ต์ ํํ ๋ฒ์ ์
๋๋ค๐
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
// ์ ๋ ฌํ ๋ฐ์ดํฐ ๋ฐฐ์ด
int[] data = {6, 3, 8, 5, 7, 9, 2};
int n = data.length;
// ๋ฐ๊นฅ์ชฝ ๋ฃจํ: ๊ฐ ํ์ (Pass)๋ง๋ค ๊ฐ์ฅ ํฐ ๊ฐ์ด ๋ค๋ก ํ์ ๋จ
for (int i = 0; i < n - 1; i++) {
boolean swapped = false; // ์๋ฆฌ ๊ตํ ๋ฐ์ ์ฌ๋ถ ํ์ธ
// ์์ชฝ ๋ฃจํ: ์ธ์ ํ ๋ ์ซ์๋ฅผ ๋น๊ต
// ๋ค์ชฝ i๊ฐ๋ ์ด๋ฏธ ์ ๋ ฌ๋์์ผ๋ฏ๋ก ๋น๊ต ๋ฒ์์์ ์ ์ธ (n - 1 - i)
for (int j = 0; j < n - 1 - i; j++) {
// ์์ ์ซ์๊ฐ ๋ ํฌ๋ฉด ๊ตํ(Swap)
if (data[j] > data[j + 1]) {
int tmp = data[j];
data[j] = data[j + 1];
data[j + 1] = tmp;
swapped = true; // ๊ตํ์ด ๋ฐ์ํ์์ ๊ธฐ๋ก
}
}
// ๋ง์ฝ ์ด๋ฒ ํ์ ์์ ๊ตํ์ด ๋จ ํ ๋ฒ๋ ์์๋ค๋ฉด?
// ์ด๋ฏธ ์ ๋ ฌ์ด ์๋ฃ๋ ์ํ์ด๋ฏ๋ก ๋ฃจํ๋ฅผ ์ฆ์ ์ข
๋ฃ(Early Exit)
if (!swapped) break;
}
// ๊ฒฐ๊ณผ ํ์ธ
System.out.println("์ ๋ ฌ ๊ฒฐ๊ณผ: " + Arrays.toString(data));
}
}
๐ก ์๊ฐ ๋ณต์ก๋(Time Complexity)๋?
์ปดํจํฐ๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ค์ '์ด' ๋จ์๊ฐ ์๋๋ผ, ๋ฐ์ดํฐ์ ๊ฐ์ n ์ ๋ฐ๋ฅธ ์ฐ์ฐ ํ์๋ก ๋ํ๋ธ ๊ฒ์ ๋๋ค.ํ๋์จ์ด ์ฑ๋ฅ๊ณผ ๊ด๊ณ์์ด ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ ๊ฐ๊ด์ ์ผ๋ก ํ๋จํ๋ ๊ธฐ์ค์ด ๋ฉ๋๋ค. ๋ฒ๋ธ ์ ๋ ฌ์ ๋ณต์ก๋: \( O(n^2) \) ๋ฒ๋ธ ์ ๋ ฌ์ ์ค์ฒฉ๋ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๊ฐ \( n \)๊ฐ์ผ ๋ ์ฝ \( n^2 \)๋ฒ์ ๋น๊ต ์ฐ์ฐ์ ์ํํด์.
์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ๊ฐ 10๋ฐฐ ๋์ด๋๋ฉด ์ฐ์ฐ ํ์๋ 100๋ฐฐ๋ก ๊ธ๊ฒฉํ ์ฆ๊ฐํ๊ฒ ๋ฉ๋๋ค.
๐ ๋ง๋ฌด๋ฆฌ
| ๊ตฌ๋ถ | ๋ด์ฉ |
|---|---|
| ์๊ฐ ๋ณต์ก๋ | ์ต์ ์ ๊ฒฝ์ฐ $O(n^2)$, ์ต์ ํ ์ $O(n)$ |
| ์ฅ์ | ๊ตฌํ์ด ์ ๋ง ์ฝ๊ณ ์ง๊ด์ . ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ๋ ๊ฑฐ์ ํ์ ์์. |
| ๋จ์ | ๋ฐ์ดํฐ๊ฐ ๋ง์์ง์๋ก ๋น๊ต ํ์๊ฐ ๋๋ฌด ๋ง์์ ธ์ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ ํธ |
์ด๋ฒ ์ ๋ฆฌ๋ฅผ ํตํด ๋ฒ๋ธ ์ ๋ ฌ์ ๋์ ์๋ฆฌ๋ฟ๋ง ์๋๋ผ, ์๊ฐ ๋ณต์ก๋๋ผ๋ ์ค์ํ ๊ฐ๋
๊น์ง ๊ตฌ์ฒด์ ์ผ๋ก ์ดํดํ ์ ์์์ด์.
๋จ์ํ ์๊ณ ๋ฆฌ์ฆ์ด์ง๋ง ์ต์ ํ ๊ณผ์ ์ ๊ณ ๋ฏผํด ๋ณด๋ ๊ฒ๋ง์ผ๋ก๋ ๊ณต๋ถ๊ฐ ๋ง์ด ๋๋ ์๊ฐ์ด์์ต๋๋ค. ๐
'Computer Science > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ํด์ ํ ์ด๋ธ(Hash Table) (0) | 2026.03.16 |
|---|---|
| ์๋ฃ๊ตฌ์กฐ - ์คํ(Stack) (1) | 2025.04.17 |