๐Ÿ’ฟ Data/๋ถ€ํŠธ์บ ํ”„

[TIL] 99. [์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ •๋ ฌ

Jayden1116 2022. 4. 6. 20:19

ํ‚ค์›Œ๋“œ

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ์ •๋ ฌ
  • ๋ฒ„๋ธ”์ •๋ ฌ
  • ์‚ฝ์ž…์ •๋ ฌ
  • ์„ ํƒ์ •๋ ฌ

์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ตฌ๊ตฌ๋‹จ์„ ์˜ˆ์‹œ๋กœ ๋“ ๋‹ค๋ฉด
๊ตฌ๊ตฌ๋‹จ์˜ ์ˆซ์ž๋“ค์€ ์ž๋ฃŒ๊ตฌ์กฐ, ๊ณฑ์…ˆ์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ํ•ด๋‹น
์ฆ‰, ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๊ธฐ๋ฐ˜, ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฐฉ๋ฒ•

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ •๋ ฌ

  • ๋ง ๊ทธ๋Œ€๋กœ ์ž๋ฃŒ๋“ค์„ ์ผ์ •ํ•œ ๊ทœ์น™์— ๋งž๊ฒŒ ์ •๋ฆฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜(๋ณดํ†ต์€ ์˜ค๋ฆ„์ฐจ์ˆœ)

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

  • ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ์ •๋ ฌ๋˜๋ฉฐ ๋งˆ์น˜ ๊ฑฐํ’ˆ์ด ์˜ฌ๋ผ์˜ค๋Š” ๋ชจ์–‘
  • ์„œ๋กœ ์ด์›ƒํ•œ ๋‘ ์›์†Œ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•˜๊ณ  ๊ตํ™˜์„ ๋ฐ˜๋ณต
  • ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ฉฐ ์‚ฌ์‹ค์ƒ ๊ฐ€์žฅ ๋น„ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜
  1. 1๋ฒˆ์งธ ํ•ญ๋ชฉ๊ณผ 2๋ฒˆ์งธ ๋น„๊ต ํ›„ 1๋ฒˆ์งธ๊ฐ€ ๋” ํฌ๋ฉด ํ•ญ๋ชฉ ๊ต์ฒด
  2. 2๋ฒˆ์งธ, 3๋ฒˆ์งธ ~ ์ญ‰ 1๋ฒˆ์ฒ˜๋Ÿผ ๋ฐ˜๋ณต
    (ํ•œ๋ฒˆ์˜ ์‚ฌ์ดํด์„ ๋งˆ์น˜๋ฉด ๊ฐ€์žฅ ๋์—๋Š” ๊ฐ€์žฅ ํฐ ๊ฐ’์ด ์œ„์น˜ํ•˜๊ฒŒ ๋จ. ๋”ฐ๋ผ์„œ ๊ฐ€์žฅ ๋๋‹จ์€ ๋” ์•ˆ๋ด๋„ ๊ดœ์ฐฎ๋‹ค.)
  3. ํ•œ ์‚ฌ์ดํด์„ ๋Œ๊ณ ๋‚˜๋ฉด ๋งˆ์ง€๋ง‰์— ๊ฐ€์žฅ ํฐ ๊ฐ’์ด ์œ„์น˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ 1๋ฒˆ์งธ๋ถ€ํ„ฐ n-1๋ฒˆ์งธ๊นŒ์ง€ ๋ฐ˜๋ณต
  • ๋ชฉ๋ก์˜ ์ •๋ ฌ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ๋ฌด์กฐ๊ฑด ์ด์ค‘๋ฐ˜๋ณต๋ฌธ์— ๋Œ€ํ•œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๊ฒŒ๋˜๋ฏ€๋กœ O(n^2)
  • ๋ฐ”๋กœ ์ด์›ƒํ•œ ๋…ธ๋“œ๋งŒ ๊ตํ™˜ํ•˜๋ฏ€๋กœ ๋น„๊ต์  ์•ˆ์ •์ 
def bubble_sort(li):
    n = len(li)
    for i in range(n):
        for j in range(n - 1 - i):
            if li[j] > li[j+1]:
                li[j], li[j+1] = li[j+1], li[j]

    return li

[์ •๋ ฌ] ์‚ฝ์ž…์ •๋ ฌ(Insertion Sort)

image

  • ์™ผ์ชฝ 1๊ฐœ๋ถ€ํ„ฐ ์„ ํƒํ•˜์—ฌ ์ •๋ ฌ ๋ฐฐ์—ด์ด๋ผ ๊ฐ€์ •ํ•˜๊ณ  ์˜ค๋ฅธ์ชฝ์˜ ๊ฐ’๋“ค์„ ํ•˜๋‚˜์”ฉ ์‚ฝ์ž…ํ•˜์—ฌ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ์œ„์—์„œ ํšŒ์ƒ‰์˜์—ญ(์ •๋ˆ์ด ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ์ •๋ ฌ)์— ๋Œ€ํ•ด ํ•˜์–€์ƒ‰์˜์—ญ(์ƒˆ๋กœ ๊ฐ’์„ ๋ณด๋‚ด๋Š” ์˜์—ญ)์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ด
  • 31์ด ํšŒ์ƒ‰์˜์—ญ์— ๋Œ€ํ•ด์„œ ํšŒ์ƒ‰์˜ ์˜ค๋ฅธ์ชฝ(๊ฐ’์ด ํฐ ๋ถ€๋ถ„)๋ถ€ํ„ฐ ๋น„๊ตํ•˜๋ฉฐ 31์ด ํฐ ๊ฒฝ์šฐ ๊ทธ ์ž๋ฆฌ์—์„œ ์Šค์™‘
  • ์„ ํƒ์ •๋ ฌ๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ๊ฐ’์ด ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š๊ณ  ๋น„๊ต ํ›„ ์‚ฝ์ž…์„ ๋™์‹œ์— ์ง„ํ–‰
  • ์†Œ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๋Š”๋ฐ ํŠนํ™”
  • ๋ฒ„๋ธ”, ์„ ํƒ ์ •๋ ฌ์ด ์ ์ฐจ ๋น„๊ต/ํƒ์ƒ‰ ๋ฒ”์œ„๊ฐ€ ์ข์•„์ง€๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ์‚ฝ์ž…์ •๋ ฌ์€ ์ ์ฐจ ์ปค์ง(ํšŒ์ƒ‰๋ถ€๋ถ„์ด ์ปค์ง€๋‹ˆ๊นŒ)
  • ์•„์ฃผ ์ด์ƒ์ ์œผ๋กœ ์ •๋ˆ๋œ ์ •๋ ฌ์— ๋Œ€ํ•ด์„  O(n)์ด์ง€๋งŒ ์ตœ์•…์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์— ๋Œ€ํ•ด์„  O(n^2)
def insertion_sort(li):
    for i in range(1, len(li)):
        for j in range(i, 0, -1):
            if li[j] < li[j-1]:
                li[j-1], li[j] = li[j], li[j-1]

    return li

[์ •๋ ฌ] ์„ ํƒ์ •๋ ฌ(Selection Sort)

image

  • ๊ฐ€์žฅ ์™ผ์ชฝ๋ถ€ํ„ฐ ๋‚˜๋จธ์ง€ ์ •๋ ฌ์—์„œ์˜ ์ตœ์†Ÿ๊ฐ’๊ณผ ๋น„๊ตํ•˜์—ฌ ์Šค์™‘ํ•˜๋ฉฐ ์ง„ํ–‰
  • ๊ฐ€์žฅ ์™ผ์ชฝ์— ์ตœ์†Ÿ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋ฉด์„œ ์ ์ฐจ ํƒ์ƒ‰ํ•˜๋Š” ๋ฒ”์œ„๊ฐ€ ์ค„์–ด๋“œ๋Š” ๊ตฌ์กฐ
  • '์ตœ์†Œ๊ฐ’์„ ๊ฐ–๋Š” ๋…ธ๋“œ ์„ ํƒ -> ์™ผ์ชฝ๊ฐ’๊ณผ ๋น„๊ต -> ๊ตํ™˜
  • ์„œ๋กœ ์ด์›ƒํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ๊ตํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋Œ€์ ์œผ๋กœ ๋ถˆ์•ˆ์ •
  • ๋˜ํ•œ ์™ธ๋ถ€ ๋ฐ ๋‚ด๋ถ€๋ฃจํ”„ ๋ชจ๋‘ O(n)์œผ๋กœ ์ด์ค‘๋ฐ˜๋ณต๋ฌธ์ด๋ฏ€๋กœ O(n^2)
def selection_sort(li):
    for i in range(len(li)):
        min_idx = i
        for j in range(i+1, len(li)):
            if li[j] < li[min_idx]:
                min_idx = j
        li[i], li[min_idx] = li[min_idx], li[i]

    return li
๊ตํ™˜(์Šค์™‘)

1) ์ผ๋ฐ˜์ ์ธ ์Šค์™‘ ๋ฐฉ์‹

a = 1
b = 2

temp = a
a = b
b = temp

2) ํŒŒ์ด์ฌ์—์„œ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•œ ์Šค์™‘ ๋ฐฉ์‹

a = 1
b = 2

a, b = b, a

์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ž…๋ฌธ์œผ๋กœ ๋งŽ์ด ๋ฐฐ์šฐ๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ํ•™์Šต!
์œ„์˜ ์ •๋ ฌ์€ ์•„์ฃผ ๊ธฐ์ดˆ์ด๊ณ  ํšจ์œจ๋ฉด์—์„œ ์‹ค์šฉ์„ฑ์€ ๋–จ์–ด์ง„๋‹ค!
์‹ค์ œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ข…๋ฅ˜๋Š” ์ •๋ง ๋งŽ๋‹ค!