Sort

์ •๋ ฌ(Sorting) ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์—ดํ•˜๋Š” ์ž‘์—…์œผ๋กœ, ๋งŽ์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋‚˜ ์‹ค์ œ ๊ฐœ๋ฐœ์—์„œ ์ž์ฃผ ๋“ฑ์žฅํ•จ. Java ์—์„œ๋„ ๋‹ค์–‘ํ•œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

๊ธฐ๋ณธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜(๋ฒ„๋ธ”, ์„ ํƒ, ์‚ฝ์ž…) ๋ถ€ํ„ฐ ๊ณ ๊ธ‰ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜(ํ€ต, ๋ณ‘ํ•ฉ, ํž™) ๊นŒ์ง€ ๊ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ฐœ๋…, ์‹œ๊ฐ„ ๋ณต์žก๋„, Java ์ฝ”๋“œ ์˜ˆ์ œ๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ์„ฑ๋Šฅ์„ ๋น„๊ตํ•ด๋ณด๊ฒ ์Œ.


๊ธฐ๋ณธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

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

  • ๊ฐœ๋… : ์ธ์ ‘ํ•œ ๋‘ ๊ฐ’์„ ๋น„๊ตํ•ด์„œ ์ž˜๋ชป๋œ ์ˆœ์„œ๋ผ๋ฉด ๊ตํ™˜. ํ•œ ๋ฐ”ํ€ด๋งˆ๋‹ค ๊ฐ€์žฅ ํฐ ์ˆ˜๊ฐ€ ๋’ค๋กœ ์ด๋™ํ•จ.

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ :

    • ์ตœ์„  : O(n)O(n)

    • ํ‰๊ท /์ตœ์•… : O(n2)O(n^2)

  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(1)O(1)

  • ํŠน์ง• : ๋‹จ์ˆœํ•˜๊ณ  ์•ˆ์ • ์ •๋ ฌ์ด์ง€๋งŒ ์„ฑ๋Šฅ์ด ๊ฐ€์žฅ ๋–จ์–ด์ง.

public static void bubbleSort(int[] arr) {
    for(int i = 0; i < arr.length - 1; i++) {
        boolean swapped = false;
        for(int j = 0; j < arr.length - i - 1; j++) {
            if(arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                swapped = true;
            }
        }
        if (!swapped) break;
    }
}

2. ์„ ํƒ ์ •๋ ฌ(Selection Sort)

  • ๊ฐœ๋… : ๋‚จ์€ ๋ถ€๋ถ„ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ๊ณจ๋ผ ์•ž์ชฝ๊ณผ ๊ตํ™˜

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : ํ•ญ์ƒ O(n2)O(n^2)

  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(1)O(1)

  • ํŠน์ง• : ๊ตํ™˜ ํšŸ์ˆ˜๊ฐ€ ์ ์ง€๋งŒ ๋ถˆ์•ˆ์ • ์ •๋ ฌ.


3. ์‚ฝ์ž… ์ •๋ ฌ(Insertion Sort)

  • ๊ฐœ๋… : ์•ž์—์„œ๋ถ€ํ„ฐ ์ •๋ ฌ๋œ ๋ถ€๋ถ„์— ์ƒˆ ๊ฐ’์„ ์•Œ๋งž์€ ์œ„์น˜์— ์‚ฝ์ž….

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ :

    • ์ตœ์„  : O(n)O(n) (์ด๋ฏธ ์ •๋ ฌ๋œ ๊ฒฝ์šฐ)

    • ํ‰๊ท  / ์ตœ์•… : O(n2)O(n^2)

  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(1)O(1)

  • ํŠน์ง• : ๊ฑฐ์˜ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ๋น ๋ฆ„. ์•ˆ์ • ์ •๋ ฌ.


๊ณ ๊ธ‰ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

4. ํ€ต ์ •๋ ฌ(Quick Sort)

  • ๊ฐœ๋… : ๊ธฐ์ค€(pivot) ์„ ์ •ํ•ด ์ขŒ์šฐ๋กœ ๋ถ„ํ• ํ•˜๊ณ  ์žฌ๊ท€์ ์œผ๋กœ ์ •๋ ฌ

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ :

    • ํ‰๊ท  : O(nlogn)O(n log n)

    • ์ตœ์•… : O(n2)O(n^2)

  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(logn)O(log n) (์žฌ๊ท€ ์Šคํƒ)

  • ํŠน์ง• : ๋งค์šฐ ๋น ๋ฅด๋ฉฐ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋จ. ๋ถˆ์•ˆ์ • ์ •๋ ฌ


5. ๋ณ‘ํ•ฉ ์ •๋ ฌ(Merge Sort)

  • ๊ฐœ๋… : ๋ฐฐ์—ด์„ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ์ •๋ ฌ ํ›„ ๋ณ‘ํ•ฉ

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : ํ•ญ์ƒ O(nlogn)O(n logn)

  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(n)O(n) (์ถ”๊ฐ€ ๋ฐฐ์—ด ํ•„์š”)

  • ํŠน์ง• : ์•ˆ์ • ์ •๋ ฌ, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€๋งŒ ์„ฑ๋Šฅ ์ผ์ •.


6. ํž™ ์ •๋ ฌ(Heap Sort)

  • ๊ฐœ๋… : ์ตœ๋Œ€ ํž™์„ ๊ตฌ์„ฑ ํ›„ ๋ฃจํŠธ์™€ ๊ตํ™˜ํ•˜๋ฉฐ ์ •๋ ฌ

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : ํ•ญ์ƒ O(nlogn)O(n log n)

  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(1)O(1)

  • ํŠน์ง• : ๋ถˆ์•ˆ์ • ์ •๋ ฌ, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์ ๊ณ  ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ ์•ˆ์ •๋œ ์„ฑ๋Šฅ.


์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ฑ๋Šฅ ๋น„๊ตํ‘œ

์•Œ๊ณ ๋ฆฌ์ฆ˜

์ตœ์„ 

ํ‰๊ท 

์ตœ์•…

๊ณต๊ฐ„๋ณต์žก๋„

์•ˆ์ •์„ฑ

๋ฒ„๋ธ” ์ •๋ ฌ

O(n)

O(n^2)

O(n^2)

O(1)

์•ˆ์ •

์„ ํƒ ์ •๋ ฌ

O(n^2)

O(n^2)

O(n^2)

O(1)

๋ถˆ์•ˆ์ •

์‚ฝ์ž… ์ •๋ ฌ

O(n)

O(n^2)

O(n^2)

O(1)

์•ˆ์ •

ํ€ต ์ •๋ ฌ

O(n log n)

O(n log n)

O(n^2)

O(log n)

๋ถˆ์•ˆ์ •

๋ณ‘ํ•ฉ ์ •๋ ฌ

O(n log n)

O(n log n)

O(n log n)

O(n)

์•ˆ์ •

ํž™ ์ •๋ ฌ

O(n log n)

O(n log n)

O(n log n)

O(1)

๋ถˆ์•ˆ์ •

์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ ํƒ ํŒ

  • ์ž…๋ ฅ์ด ๊ฑฐ์˜ ์ •๋ ฌ๋œ ๊ฒฝ์šฐ: ์‚ฝ์ž… ์ •๋ ฌ

  • ์ผ๋ฐ˜์ ์ธ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ: ํ€ต ์ •๋ ฌ

  • ์ตœ์•…์˜ ๊ฒฝ์šฐ ์„ฑ๋Šฅ ๋ณด์žฅ: ๋ณ‘ํ•ฉ ์ •๋ ฌ, ํž™ ์ •๋ ฌ

  • ์•ˆ์ •์„ฑ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ: ๋ณ‘ํ•ฉ ์ •๋ ฌ

  • ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ œํ•œ๋œ ํ™˜๊ฒฝ: ํž™ ์ •๋ ฌ

Last updated