CodeGym /์ž๋ฐ” ์ฝ”์Šค /Python SELF KO /๋ฒ„๋ธ” ์ •๋ ฌ

๋ฒ„๋ธ” ์ •๋ ฌ

Python SELF KO
๋ ˆ๋ฒจ 58 , ๋ ˆ์Šจ 0
์‚ฌ์šฉ ๊ฐ€๋Šฅ

5.1 ๋ฒ„๋ธ” ์ •๋ ฌ ์ •์˜

๋ฒ„๋ธ” ์ •๋ ฌ (Bubble Sort) โ€” ์ด๊ฑด ์•„์ฃผ ๊ฐ„๋‹จํ•œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด์•ผ. ๋ฆฌ์ŠคํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ˆœํšŒํ•˜๋ฉด์„œ ์ธ์ ‘ํ•œ ์š”์†Œ๋“ค์„ ๋น„๊ตํ•˜๊ณ , ๋งŒ์•ฝ ์ˆœ์„œ๊ฐ€ ์ž˜๋ชป๋˜์—ˆ์œผ๋ฉด ์„œ๋กœ ๊ตํ™˜ํ•ด. ์ด ํ”„๋กœ์„ธ์Šค๋Š” ๋ฆฌ์ŠคํŠธ๊ฐ€ ์™„์ „ํžˆ ์ •๋ ฌ๋  ๋•Œ๊นŒ์ง€ ์ง€์†๋ผ.

์ž‘๋™ ์›๋ฆฌ:

  1. ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๋ชจ๋“  ์ธ์ ‘ํ•œ ์š”์†Œ ์Œ์„ ๋น„๊ตํ•ด.
  2. ์š”์†Œ๋“ค์ด ์ž˜๋ชป๋œ ์ˆœ์„œ์— ์žˆ์„ ๊ฒฝ์šฐ (์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์ผ ๋•Œ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ๋‘ ๋ฒˆ์งธ๋ณด๋‹ค ํด ๋•Œ) โ€” ์„œ๋กœ ๊ตํ™˜ํ•ด.
  3. ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ์š”์†Œ ์Œ์— ๋Œ€ํ•ด ๋ฐ˜๋ณตํ•ด.
  4. ์ „์ฒด ์ˆœํšŒ๊ฐ€ ๋๋‚˜๋ฉด ๊ฐ€์žฅ ํฐ ์š”์†Œ๊ฐ€ ์ž์‹ ์˜ ์ž๋ฆฌ์— '๋– ์˜ค๋ฅด๊ฒŒ ๋ผ' (๋ฌผ ํ‘œ๋ฉด์˜ ๊ฑฐํ’ˆ์ฒ˜๋Ÿผ), ๊ทธ๋ž˜์„œ ๋‹ค์Œ ์ˆœํšŒ์—์„œ๋Š” ๋” ์ด์ƒ ์ฐธ์—ฌํ•˜์ง€ ์•Š์•„๋„ ๋ผ.
  5. ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ •๋ ฌ๋  ๋•Œ๊นŒ์ง€ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด.

๋ฒ„๋ธ” ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ฐ ๊ณต๊ฐ„ ๋ณต์žก๋„

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

  • ์ตœ์•…์˜ ๊ฒฝ์šฐ: O(n^2) โ€” ์š”์†Œ๋“ค์ด ์ฒ˜์Œ์— ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•ด.
  • ํ‰๊ท ์˜ ๊ฒฝ์šฐ: O(n^2) โ€” ์š”์†Œ๋“ค์ด ๋žœ๋ค์œผ๋กœ ๋ฐฐ์—ด๋˜์–ด ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•ด.
  • ์ตœ๊ณ ์˜ ๊ฒฝ์šฐ: O(n) โ€” ์š”์†Œ๋“ค์ด ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•ด (์—ฌ๊ธฐ์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ตํ™˜์ด ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ์ตœ์ ํ™”๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด).

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

O(1) โ€” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— (์ผ์‹œ์ ์ธ ๊ฐ’๋“ค์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐœ์˜ ๋ณ€์ˆ˜๋งŒ ํ•„์š”ํ•ด).

5.2 ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„

'๋ฒ„๋ธ” ์ •๋ ฌ' ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ณ  ๊ธฐ๋ณธ์ ์ธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด์•ผ. ๋‹จ์ˆœํžˆ ์š”์†Œ๋ฅผ ์ง์ง€์–ด ๋น„๊ตํ•˜๊ณ  ํ•„์š”์‹œ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฑฐ์•ผ.

๋ฒ„์ „ 1:


array = [6, 43, 2, 1, 2, 1, 1, 1, 1, 6, 7, 8]
n = len(array)
            
for i in range(n):
    for j in range(n - 1):
        if array[j] > array[j + 1]:
            array[j], array[j + 1] = array[j + 1], array[j]  # ์š”์†Œ ๊ตํ™˜

print("์ •๋ ฌ๋œ ๋ฐฐ์—ด:", array)
# ์ถœ๋ ฅ: ์ •๋ ฌ๋œ ๋ฐฐ์—ด: [1, 1, 1, 1, 1, 2, 2, 6, 6, 7, 8, 43]

๋‚ด๋ถ€ ๋ฃจํ”„ (์ดˆ๋ก์ƒ‰์œผ๋กœ ๊ฐ•์กฐ๋จ)๋Š” ์š”์†Œ๋ฅผ ์˜ค๋ฅธ์ชฝ ์ด์›ƒ๊ณผ ๋น„๊ตํ•ด. ๊ทธ๋ฆฌ๊ณ  ํ•„์š”ํ•˜๋‹ค๋ฉด ์œ„์น˜๋ฅผ ๋ฐ”๊ฟ”.

๋ฒ„์ „ 2:

์ฒซ ๋ฒˆ์งธ ์ˆœํšŒ ํ›„์— ๊ฐ€์žฅ ํฐ ์š”์†Œ๊ฐ€ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์œ„์น˜ํ•˜๊ฒŒ ๋˜๋‹ˆ๊นŒ, ๋‹ค์Œ ์ˆœํšŒ์—์„œ๋Š” ์ด ์š”์†Œ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„๋„ ๋ผ.

๋‘ ๋ฒˆ์งธ ์ˆœํšŒ ํ›„์—๋Š” ์˜ค๋ฅธ์ชฝ์— ์ตœ๋Œ€ ๋‘ ๊ฐœ์˜ ํฐ ์š”์†Œ๊ฐ€ ์žˆ๊ฒŒ ๋˜๋‹ˆ๊นŒ, ๋‚ด๋ถ€ ๋ฃจํ”„๋Š” n - 1๊นŒ์ง€๊ฐ€ ์•„๋‹ˆ๋ผ n - 1 - i๊นŒ์ง€ ์ง„ํ–‰ํ•ด. ์—ฌ๊ธฐ์„œ i๋Š” ์™ธ๋ถ€ ๋ฃจํ”„์˜ ์ง„ํ–‰๋œ ํšŸ์ˆ˜๋ฅผ ์˜๋ฏธํ•ด.

์ƒˆ ๋ฒ„์ „์€ ์ด๋ ‡๊ฒŒ ์ƒ๊ฒผ์–ด:


array = [6, 43, 2, 1, 2, 1, 1, 1, 1, 6, 7, 8]
n = len(array)
            
for i in range(n):
    for j in range(n - 1 - i):
        if array[j] > array[j + 1]:
            array[j], array[j + 1] = array[j + 1], array[j]  # ์š”์†Œ ๊ตํ™˜

print("์ •๋ ฌ๋œ ๋ฐฐ์—ด:", array)
# ์ถœ๋ ฅ: ์ •๋ ฌ๋œ ๋ฐฐ์—ด: [1, 1, 1, 1, 1, 2, 2, 6, 6, 7, 8, 43]

๋ฒ„์ „ 3:

๋ฐฐ์—ด์ด ์ด๋ฏธ ๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ์ˆ˜๋„ ์žˆ์–ด. ๊ทธ๋ž˜์„œ ์ด๋Ÿฐ ์ตœ์ ํ™”๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด: ๋งŒ์•ฝ ๋‚ด๋ถ€ ๋ฃจํ”„๊ฐ€ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ˆœํšŒํ–ˆ์ง€๋งŒ ๋‹จ ํ•˜๋‚˜์˜ ๊ตํ™˜๋„ ์—†์—ˆ๋‹ค๋ฉด, ์ •๋ ฌ์ด ์™„๋ฃŒ๋œ ๊ฑฐ์•ผ.

์ด๋ฒˆ ๋ฒ„์ „์—์„œ๋Š” swapped ๋ณ€์ˆ˜๋กœ ๋งˆ์ง€๋ง‰ ์ˆœํšŒ์—์„œ ์š”์†Œ์˜ ๊ตํ™˜์ด ๋ฐœ์ƒํ–ˆ๋Š”์ง€๋ฅผ ์ถ”์ ํ•ด. ๋งŒ์•ฝ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•œ ํ›„ ๊ตํ™˜์ด ํ•˜๋‚˜๋„ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ๋ฐฐ์—ด์€ ์ด๋ฏธ ์ •๋ ฌ๋œ ์ƒํƒœ๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ณ , ์ถ”๊ฐ€์ ์ธ ์ˆœํšŒ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์–ด โ€” ์ด๊ฑด ์ •๋ ฌ์— ๋„์›€์ด ๋˜์ง€ ์•Š๊ฑฐ๋“ . ๋”ฐ๋ผ์„œ, swapped ๋ณ€์ˆ˜๋Š” ๊ฑฐ์˜ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹คํ–‰์„ ํฌ๊ฒŒ ๋น ๋ฅด๊ฒŒ ํ•ด์ค˜, ์กฐ๊ธฐ ์ข…๋ฃŒํ•˜๋ฉด์„œ ๋ง์ด์ง€.

Python์—์„œ์˜ ๋ฒ„๋ธ” ์ •๋ ฌ ๊ตฌํ˜„:


def bubble_sort(array):
    n = len(array)
    for i in range(n):
        swapped = False  # ์ตœ์ ํ™”: ๊ตํ™˜์ด ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ๊ฒ€์‚ฌ
        for j in range(0, n - i - 1):
            if array[j] > array[j + 1]:
                array[j], array[j + 1] = array[j + 1], array[j]  # ์š”์†Œ ๊ตํ™˜
                swapped = True
        if not swapped:
            break  # ๊ตํ™˜์ด ์—†์—ˆ๋‹ค๋ฉด, ๋ฐฐ์—ด์€ ์ด๋ฏธ ์ •๋ ฌ๋œ ์ƒํƒœ
    return array

# ์‚ฌ์šฉ ์˜ˆ์ œ:
array = [64, 34, 25, 12, 22, 11, 90]
sorted_array = bubble_sort(array)
print("์ •๋ ฌ๋œ ๋ฐฐ์—ด:", sorted_array)
# ์ถœ๋ ฅ: ์ •๋ ฌ๋œ ๋ฐฐ์—ด: [11, 12, 22, 25, 34, 64, 90]
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION