ΰ­¨β”ˆβ”ˆβ”ˆ Studyβ”ˆβ”ˆβ”ˆΰ­§/β†˜ Algorithm

[Python] μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜

λΉ΅λΉ΅μƒˆ 2021. 4. 19. 14:26

 

버블정렬

- μ΄μ›ƒν•œ 두 값을 비ꡐ해 μ •λ ¬ν•˜λŠ” 방법이닀.

- λͺ¨λ“  μ›μ†Œλ₯Ό ν•˜λ‚˜ν•˜λ‚˜ λΉ„κ΅ν•˜μ—¬ swapν•˜λŠ” μž‘μ—…μ„ λ°˜λ³΅ν•œλ‹€.

- κ΅¬ν˜„μ΄ λ‹¨μˆœν•˜λ‹€.

- μ΅œλŒ€ O(n^2)의 μ‹œκ°„λ³΅μž‘λ„λ₯Ό κ°€μ§„λ‹€.

# 버블정렬
a = random.sample(range(1, 10), 5)
print("=== bubble ===")
print(a)  # μ •λ ¬ μ „
n = len(a)
for i in range(n - 1):
    for j in range(n - 1 - i):
        if a[j] > a[j + 1]:
            a[j], a[j + 1] = a[j + 1], a[j]
print(a)

 

μ‚½μž…μ •λ ¬

- ν˜„μž¬ μœ„μΉ˜μ—μ„œ, 이미 μ •λ ¬λœ 이전 λ°°μ—΄λ“€μ˜ 데이터λ₯Ό μ°¨λ‘€λŒ€λ‘œ λΉ„κ΅ν•˜μ—¬ μžμ‹ μ˜ μœ„μΉ˜λ₯Ό μ°Ύμ•„ κ·Έ μœ„μΉ˜μ— μ‚½μž…ν•œλ‹€.

- μ΅œμ•…μ˜ 경우 O(n^2), μ΅œμ„ μ˜ 경우(이미 μ •λ ¬λœ 경우)μ—λŠ” O(n)이닀.

# μ‚½μž…μ •λ ¬
a = random.sample(range(1, 10), 5)
print("=== insertion ===")
print(a)
n = len(a)
for i in range(1, n):
    key = a[i]  # κΈ°μ€€ κ°’
    j = i - 1  # λ°”λ‘œ 이전 μœ„μΉ˜
    while j >= 0 and a[j] > key:  # λͺ‡ 번째 μžλ¦¬μ— 값을 λ„£μ–΄μ•Ό ν•˜λŠ”μ§€ 찾음
        a[j + 1] = a[j]
        j -= 1  # 맨 μ•žκΉŒμ§€ 체크
    a[j + 1] = key
print(a)

 

선택정렬

- μ£Όμ–΄μ§„ λ°°μ—΄μ—μ„œ μ΅œμ†Ÿκ°’μ„ μ•žμœΌλ‘œ 보낸닀.

- λ°μ΄ν„°μ˜ μ•žμ—μ„œλΆ€ν„° μˆœμ„œλŒ€λ‘œ μ„ νƒν•˜κ³ , μ„ νƒλœ λ°μ΄ν„°μ˜ 뒀에 μžˆλŠ” 데이터듀 쀑 κ°€μž₯ μž‘μ€ κ°’κ³Ό swapν•œλ‹€.

- νƒμƒ‰κ³Όμ •μ—μ„œμ˜ 반볡과 선택 μœ„μΉ˜λ₯Ό μ¦κ°€μ‹œν‚€λŠ” λ°˜λ³΅μ„ ν•˜μ—¬ O(n^2)이닀.

# 선택정렬
a = random.sample(range(1, 10), 5)
print("=== selection ===")
print(a)
n = len(a)
for i in range(n):
    min_idx = i
    for j in range(i + 1, n):
        if a[min_idx] > a[j]:  # μ΅œμ†Ÿκ°’ 인덱슀λ₯Ό 찾음
            min_idx = j
    a[i], a[min_idx] = a[min_idx], a[i]
print(a)

 

퀡정렬

- μƒλŒ€μ μœΌλ‘œ λΉ λ₯Έ μ •λ ¬ 방법이닀.

- μ΅œλŒ€ O(nlogn)의 μ‹œκ°„λ³΅μž‘λ„λ₯Ό κ°–λŠ”λ‹€.

# 퀡정렬
a = random.sample(range(1, 100), 10)
print("=== quick ===")
print(a)


def quickSort(a, start, end):
    if start < end:
        left = start
        pivot = a[end]

        for i in range(start, end):
            if a[i] < pivot:  # 리슀트의 인덱슀 값이 pivot보닀 μž‘μ„ 경우
                a[i], a[left] = a[left], a[i]
                left += 1
        a[left], a[end] = a[end], a[left]
        quickSort(a, start, left - 1)
        quickSort(a, left + 1, end)


quickSort(a, 0, len(a) - 1)
print(a)