์ž๋ฃŒ๊ตฌ์กฐ/๐Ÿ‘‰์•Œ๊ณ ๋ฆฌ์ฆ˜ - 9

ํ•™์Šต๊ธฐ๋ก

์˜ค๋Š˜ ๋“ค์€ ๊ฐ•์˜ ๋ชฉ๋ก

  1. ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ์š”
  2. ๋ฒ„๋ธ”์ •๋ ฌ - 1
  3. ๋ฒ„๋ธ”์ •๋ ฌ - 2

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์—ฐ์Šต ๋ฐฉ๋ฒ•

์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ดํ•ดํ•˜๊ณ , ์Šค์Šค๋กœ ๋งŒ๋“ค์–ด๋ณด๊ธฐ

  1. ๋…ธํŠธ + ํŽœ -> ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ƒ๊ฐ
  2. ๋ฌธ์ œ ๋ถ„์„
  3. ๊ฐ„๋‹จํ•œ ์ผ€์ด์Šค๋ถ€ํ„ฐ ํ•ด๊ฒฐ๋ฐฉ๋ฒ• ์ƒ๊ฐ
  4. ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ธ๋ถ€์ ์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ƒ๊ฐ์„ ์ •๋ฆฌ(์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž‘์„ฑ)
  5. ์ง€๊ธˆ๊นŒ์ง€ ๊ธ€๋กœ ์ž‘์„ฑํ•œ ๊ฒƒ๋“ค์„ ์ฝ”๋“œ๋กœ ์ž‘์„ฑ
  6. ํ…Œ์ŠคํŠธํ•œ๋‹ค.
  7. 1~6์„ ๋ฐ˜๋ณต

โ€”์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ 1๋ฒˆ ๊ฐ•์˜ ๋‚ด์šฉ

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

์ธ์ ‘ํ•œ ๋‘ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฒ„๋ธ”

  1. ๋งจ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ธ์ ‘ํ•œ ๋‘ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•˜์—ฌ ์•ž์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋” ํฌ๋‹ค๋ฉด, ์„œ๋กœ ์Šค์™‘ํ•œ๋‹ค.
  2. ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ํ™•์ธํ• ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ์ธ๋ฑ์Šค๋กœ ๊ฐ€์„œ ์œ„๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค.
  3. ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๊ฐ€ ํ™•์ธ๋˜์—ˆ์œผ๋ฉด, ์ฒ˜์Œ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ•œ๋‹ค.
    (๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๋Š” ๊ฐ€์žฅ ํฐ ๊ฐ’์œผ๋กœ ๊ณ ์ •๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ ์‚ฌ์ดํด์—์„œ ๋น„๊ตํ•˜์ง€ ์•Š๋Š”๋‹ค.)
  4. ์ด๋ฅผ ๋” ์ด์ƒ ๋น„๊ตํ•  ํ•ญ๋ชฉ์ด ๋‚จ์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

๋ง‰์ƒ ํ…์ŠคํŠธ๋กœ ์ •๋ฆฌํ•˜๋ ค๋‹ˆ ์‰ฝ์ง€๊ฐ€ ์•Š๋„ค..

๋ฒ„๋ธ”์ •๋ ฌ ์ผ€์ด์Šค

  1. 2๊ฐœ์˜ ๋ฐ์ดํ„ฐ
    3 1 -> 1๊ณผ 3 ์Šค์™‘
    1 3

  2. 3๊ฐœ์˜ ๋ฐ์ดํ„ฐ
    5 3 1 -> 5์™€ 3 ์Šค์™‘
    3 5 1 -> 5์™€ 1 ์Šค์™‘, (5๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋กœ ๋งจ ๋’ค์— ์˜ค๊ฒŒ ๋จ, ๋‹ค์Œ ์‚ฌ์ดํด์— ๋น„๊ตํ•˜์ง€ ์•Š๋Š”๋‹ค)
    3 1 5 -> 1๊ณผ 3 ์Šค์™‘
    1 3 5

  3. 4๊ฐœ์˜ ๋ฐ์ดํ„ฐ
    7 5 3 1 -> 7, 5
    5 7 3 1 -> 7, 3
    5 3 7 1 -> 7, 1, (7์€ ๊ฐ€์žฅ ํฐ ์ˆ˜๋กœ ๋งจ ๋’ค์— ์˜ค๊ฒŒ ๋จ, ๋‹ค์Œ ์‚ฌ์ดํด์— ๋น„๊ตํ•˜์ง€ ์•Š๋Š”๋‹ค.)
    5 3 1 7 -> 5, 3
    3 5 1 7 -> 5, 1, (5๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋กœ ๋งจ ๋’ค์— ์˜ค๊ฒŒ ๋จ, ๋‹ค์Œ ์‚ฌ์ดํด์— ๋น„๊ตํ•˜์ง€ ์•Š๋Š”๋‹ค.)
    3 1 5 7 -> 3, 1
    1 3 5 7

๋ฒ„๋ธ”์†ŒํŠธ ๊ตฌํ˜„

import random
def BubbleSort(list):
    for cycle in range(0, len(list) - 1):
        swapped = False
        for i in range(0, len(list) - cycle - 1):
            if list[i] > list[i + 1]:
                list[i], list[i + 1] = list[i + 1], list[i]
                swapped = True

        # ์ด ์‚ฌ์ดํด์—  ํ•œ๋ฒˆ์ด๋ผ๋„ ์Šค์™‘๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์€
        # ์ •๋ ฌ๋˜์–ด์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฏ€๋กœ ์ข…๋ฃŒ
        if not swapped:
            break

list = random.sample(range(50), 10)
print("before : ", list)
BubbleSort(list)
print("after : ", list)

๊ฒฐ๊ณผํ™•์ธ

๊ฒฐ๊ณผ
์‹คํ–‰์„ ํ†ตํ•ด ์ •์ƒ์ ์œผ๋กœ ์†ŒํŠธ๊ฐ€ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋‹ค์‹œ ์ •๋ฆฌ

  1. swapped๋ณ€์ˆ˜๋ฅผ ๋‘๊ณ , 2๋ฒˆ ์ด์ „์— False๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
  2. ์ธ์ ‘ํ•œ ๋‘ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•˜์—ฌ ์™ผ์ชฝ ๊ฐ’์ด ๋” ํฌ๋‹ค๋ฉด ์Šค์™‘ํ•˜๊ณ , swapped๋ฅผ True๋กœ ์„ค์ •ํ•œ๋‹ค. (์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ)
  3. 2๋ฒˆ์„ ๋งจ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
  4. ์ถ”๊ฐ€ swapped๊ฐ€ False๋ฉด, ์ข…๋ฃŒํ•œ๋‹ค.
  5. ์ด์ œ ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๋Š” ์ •๋ ฌ์ด ๋œ ์ƒํƒœ์ด๋‹ค.
    ๋‹ค์Œ 2, 3๋ฒˆ์„ ๋ฐ˜๋ณตํ• ๋•Œ๋Š” ํ˜„์žฌ์˜ ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ง„ํ–‰ํ•œ๋‹ค.
  6. ์ •๋ ฌํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์„๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

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

n๊ฐœ์˜ ์š”์†Œ๋ฅผ ๊ฐ€์ง„ ๋ฆฌ์ŠคํŠธ๋ผ ํ• ๋•Œ,
์ตœ์•…์˜ ๊ฒฝ์šฐ $\sum_{k=1}^{n-1} k$๋ฒˆ ์Šค์™‘ํ•˜๊ฒ ์ง€๋งŒ,
์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๋น…์˜คํ‘œ๊ธฐ๋ฒ•์— ์˜ํ•ด $\sum_{k=1}^{n-1} k = {(n-1)(n-2)\over2} = O(n^2)$๊ฐ€ ๋œ๋‹ค.

๋งˆ์ง€๋ง‰

์ˆ˜๊ฐ•์งค
์‚ฌ์ง„ ํ•œ์žฅ์€ ์ด๊ฑธ๋กœ ์ฑ„์›Œ์•ผ์ง€ ํžˆํžˆ

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ