[Python] μ λ ¬ μκ³ λ¦¬μ¦
λ²λΈμ λ ¬
- μ΄μν λ κ°μ λΉκ΅ν΄ μ λ ¬νλ λ°©λ²μ΄λ€.
- λͺ¨λ μμλ₯Ό νλνλ λΉκ΅νμ¬ 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)