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

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

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

  1. ์„ ํƒ์ •๋ ฌ
  2. ์‚ฝ์ž…์ •๋ ฌ

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

์ตœ์†Œ๊ฐ’์„ ํƒ์ƒ‰ํ•ด์„œ ๋งจ ์•ž ๊ฐ’๊ณผ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณตํ•˜์—ฌ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

  1. ์ฒซ๋ฒˆ์งธ ๊ฐ’๋ถ€ํ„ฐ ์ตœ์†Œ๊ฐ’์„ ์ฐพ๋Š”๋‹ค.
  2. ์ตœ์†Œ๊ฐ’๊ณผ ์ฒซ๋ฒˆ์งธ ๊ฐ’์„ ์Šค์™‘ํ•œ๋‹ค.
  3. ์ฒซ๋ฒˆ์งธ ๊ฐ’(์ตœ์†Œ๊ฐ’)์„ ์ œ์™ธํ•˜๊ณ  1, 2๋ฒˆ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.(๋งˆ์ง€๋ง‰์—์„œ ๊ฐ’์ด ์ฒซ๋ฒˆ์งธ ๊ฐ’์ด ๋ ๋•Œ๊นŒ์ง€)

  4. i๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”์‹œํ‚จ๋‹ค.(i๋Š” ์ฒ˜์Œ ๊ฐ’์„ ๋œปํ•œ๋‹ค. ์‚ฌ์ดํด๋กœ ๋ด๋„ ๋ฌด๋ฐฉ)
  5. i๋ฒˆ์งธ ๊ฐ’๋ถ€ํ„ฐ ์ตœ์†Œ๊ฐ’์„ ์ฐพ๋Š”๋‹ค.
  6. ์ตœ์†Œ๊ฐ’๊ณผ i๋ฒˆ์งธ ๊ฐ’์„ ์Šค์™‘ํ•œ๋‹ค.
  7. i๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
  8. 1,2,3,4๋ฅผ n-1๋ฒˆ ๋ฐ˜๋ณตํ•œ๋‹ค.(n์€ ๊ฐ’์˜ ๊ฐฏ์ˆ˜)

์„ ํƒ์ •๋ ฌ ์˜ˆ์‹œ

3 5 -> ํƒ์ƒ‰ ์ธ๋ฑ์Šค : 0, ์ตœ์†Œ๊ฐ’ : 3 3 5 -> ํƒ์ƒ‰ ์ธ๋ฑ์Šค : 1, ์ตœ์†Œ๊ฐ’ : 5, ์Šค์™‘(3, 3) 3 5 -> ๋งˆ์ง€๋ง‰ ๊ฐ’์€

5 4 3 -> ํƒ์ƒ‰ ์ธ๋ฑ์Šค : 0, ์ตœ์†Œ๊ฐ’ : 5 5 4 3 -> ํƒ์ƒ‰ ์ธ๋ฑ์Šค : 1, ์ตœ์†Œ๊ฐ’ : 4 5 4 3 -> ํƒ์ƒ‰ ์ธ๋ฑ์Šค : 2, ์ตœ์†Œ๊ฐ’ : 3, ์Šค์™‘(5, 3) 3 4 5 -> ํƒ์ƒ‰ ์ธ๋ฑ์Šค : 1, ์ตœ์†Œ๊ฐ’ : 4 3 4 5 -> ํƒ์ƒ‰ ์ธ๋ฑ์Šค : 2, ์ตœ์†Œ๊ฐ’ : 4, ์Šค์™‘(4, 4)

์„ ํƒ์ •๋ ฌ ๊ตฌํ˜„

import random
def checkSortFunc(func):
    isSorted = False
    for i in range(0, 10):
        list = random.sample(range(50), 10)
        func(list)
        for i in range(0, len(list)-1):
            if list[i] > list[i + 1]:
                isSorted = True
                return False
    return True
def SelectionSort(list):
    for i in range(0, len(list)-1):
        min = i
        for j in range(i, len(list)):
            if list[min] > list[j]:
                min = j
        list[i], list[min] = list[min], list[i]
print(checkSortFunc(SelectionSort))

์‹คํ–‰๊ฒฐ๊ณผ๋Š” ๋‹น์—ฐํžˆ True, ์„ฑ๊ณต์ ์œผ๋กœ ์ •๋ ฌ๋˜์—ˆ๋‹ค.
์˜ค๋ฆ„์ฐจ์ˆœ

checkSortFunc๋Š” ์ •๋ ฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜,
์ •์ƒ์ ์œผ๋กœ ์ •๋ ฌ๋˜๋ฉด True,
๋น„์ •์ƒ์ ์œผ๋กœ ์ •๋ ฌ๋˜๋ฉด False๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์•„๋ž˜๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋„๋ก ํ•จ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ
๋‚ด๋ฆผ์ฐจ์ˆœ

์„ ํƒ์ •๋ ฌ ์‹œ๊ฐ„๋ณต์žก๋„

๋ฒ„๋ธ”์†ŒํŠธ์ฒ˜๋Ÿผ $n(n-1)\over2$๊ฐ€ ๋˜๊ฒ ์ง€๋งŒ
๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์— ๋”ฐ๋ผ์„œ $O(n^2)$์ด ๋œ๋‹ค.

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

๊ฐ’์„ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ์‚ฝ์ž…ํ•˜๋ฉด์„œ ์ •๋ ฌํ•œ๋‹ค.

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

์‚ฝ์ž…์ •๋ ฌ ๊ตฌํ˜„

def InsertionSort(list):
    for i in range(1, len(list)):
        data = i
        for j in range(i - 1, -1, -1):
            if list[j] > list[data]:
                list[j], list[data] = list[data], list[j]
                data = j
            else:
                break

์‚ฝ์ž…์ •๋ ฌ ์‹คํ–‰ ๊ฒฐ๊ณผ
์‚ฝ์ž…

์ถ”๊ฐ€๋กœ checkSortFunc ๊ฐœ์„ (์ •๋ ฌ ์‹คํŒจ ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ ์ถœ๋ ฅ)

def checkSortFunc(func):
    isSorted = False
    for i in range(0, 10):
        list = random.sample(range(50), 10)
        func(list)
        for i in range(0, len(list)-1):
            if list[i] > list[i + 1]:
                print(list)#๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅํ•˜๋„๋ก ๊ฐœ์„ 
                return False
    return True

๋งˆ์ง€๋ง‰

9๋ฒˆ์งธ ์ฑŒ๋ฆฐ์ง€์— ์‹คํŒจํ–ˆ๋‹ค๋Š” ๋ฉ”์ผ์ด ์™”๋‹ค.
ํ˜น์‹œ๋‚˜ ์‹ถ์–ด์„œ ๊นƒํ—™์— ๋“ค์–ด๊ฐ€์„œ ์ปค๋ฐ‹ ์‹œ๊ฐ„์„ ๋ดค๋Š”๋ฐ 11์‹œ ์ฏค์ธ๊ฒƒ ๊ฐ™์€๋ฐ,
๊ณ„์† ์ด์–ด์กŒ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.
์ด์–ด์ง€์ง€ ์•Š๋”๋ผ๋„ ๊ณ„์† 50์ผ๊ฐ„ ๊ธฐ๋ก์„ ๋‚จ๊ฒจ๋‘ฌ์•ผ์ง€.
์—‰์—‰ ใ… ใ… 

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