Computer Science/์ž๋ฃŒ๊ตฌ์กฐ

๋ฒ„๋ธ” ์ •๋ ฌ(Bubble Sort)

UNarD 2026. 3. 3. 10:12

๐Ÿซง ๊ฑฐํ’ˆ์ฒ˜๋Ÿผ ์ˆซ์ž๊ฐ€ ๋– ์˜ค๋ฅด๋Š”, ๋ฒ„๋ธ” ์ •๋ ฌ(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