ν°μ€ν 리 λ·°
<λͺ©μ°¨>
π μ λ ¬ (Sorting)
βοΈ λ°μ΄ν°λ₯Ό νΉμ ν κΈ°μ€μ λ°λΌμ μμλλ‘ λμ΄νλ κ²
βοΈ μ΄μ§ νμ(Binary Search)μ μ μ²λ¦¬ κ³Όμ μ΄ λκΈ°λ νλ€.
π νμ΄μ¬μ μ λ ¬ λΌμ΄λΈλ¬λ¦¬
βοΈ λ³ν© μ λ ¬(merge sort)μ κΈ°λ°μΌλ‘ λ§λ€μ΄μ‘μΌλ©°, ν΅ μ λ ¬λ³΄λ€λ λ리μ§λ§ μ΅μ μ κ²½μ°μλ μκ° λ³΅μ‘λ O(NlogN)μ 보μ₯νλ€λ νΉμ§μ κ°μ§λ€.
π [Python] ννμ μμλ‘ νλ 리μ€νΈ μ λ ¬ (tistory.com)
π Comparisons Sorting Algorithm (λΉκ΅ λ°©μ μ λ ¬ μκ³ λ¦¬μ¦)
π λ²λΈ μ λ ¬ (Bubble Sort)
βοΈ in-place sortλ‘ μΈμ ν λ κ°μ λ°μ΄ν°λ₯Ό λΉκ΅ν΄κ°λ©΄μ μ λ ¬μ μ§ννλ€. βοΈ κ°μ₯ ν° κ°μ λ°°μ΄μ 맨 λμΌλ‘ μ΄λμν€κΈ°λλ¬Έμ μ λ ¬νκ³ μ νλ μμμ κ°μ λ§νΌμ λλ² λ°λ³΅νκ² λλ€. - Time Complexity : O(N^2)- Space Complexity : O(1)
π μ ν μ λ ¬ (Selection Sort)
βοΈ λ§€λ² "κ°μ₯ μμ κ²μ μ ν"ν΄μ μμ λ°μ΄ν°μ λ°κΏμ€λ€.
→ κ°μ₯ μμ λ°μ΄ν°λ₯Ό μ νν΄ λ§¨ μμ μλ λ°μ΄ν°μ λ°κΎΈκ³ , κ·Έλ€μ μμ λ°μ΄ν°λ₯Ό μ νν΄ μμμ λ λ²μ§Έ λ°μ΄ν°μ λ°κΎΈλ κ³Όμ μ N - 1 λ² λ°λ³΅νλ€.
- Time Complexity : O(N^2)
→ μμ€ μ½λ μμΌλ‘ κ°λ¨ν ννμ 2μ€ λ°λ³΅λ¬Έμ΄ μ¬μ©λ¨
- Space Complexity : O(1)
π python code
π μ½μ μ λ ¬ (Insertion Sort)
νμν λλ§ μμΉλ₯Ό λ°κΎΈλ―λ‘ 'λ°μ΄ν°κ° κ±°μ μ λ ¬λμ΄ μμ λ' ν¨μ¬ ν¨μ¨μ μ΄λ€.
κΈ°λ³Έμ μΌλ‘ μκ° λ³΅μ‘λλ O(N^2)μ΄μ§λ§, νμ¬ λ¦¬μ€νΈμ λ°μ΄ν°κ° κ±°μ μ λ ¬λμ΄ μλ μνλΌλ©΄ μ΅μ μ κ²½μ° O(N)μ μκ° λ³΅μ‘λλ₯Ό κ°κ²λλ€.
π λ³ν© μ λ ¬ (Merge Sort)
π ν μ λ ¬ (Heap Sort)
π ν΅ μ λ ¬ (Quick Sort)
κΈ°μ€μ μ€μ ν λ€μ ν° μμ μμ μλ₯Ό κ΅νν ν 리μ€νΈλ₯Ό λ°μΌλ‘ λλλ λ°©μμΌλ‘ λμνλ€.
νΌλ² (Pivot) : κ΅νμ μ¬μ©λλ 'κΈ°μ€'
→ νΌλ²μ μ€μ νκ³ λ¦¬μ€νΈλ₯Ό λΆν νλ λ°©λ²μ λ°λΌμ μ¬λ¬ κ°μ§ λ°©μμ ν΅ μ λ ¬λ‘ κ΅¬λΆν μ μλ€.
νΈμ΄ λΆν (Hoare Partition) : 리μ€νΈμμ 첫 λ²μ§Έ λ°μ΄ν°λ₯Ό νΌλ²μΌλ‘ μ νλ€.
- 리μ€νΈμ μΌμͺ½μμλΆν° νΌλ²λ³΄λ€ ν° λ°μ΄ν°λ₯Ό μ ννκ³ μ€λ₯Έμͺ½μμλΆν° νΌλ²λ³΄λ€ μμ λ°μ΄ν°λ₯Ό μ νν΄ κ΅ννλ€.
- 1λ²μ λ°λ³΅ μννλ€κ° λ λ°μ΄ν°κ° μκ°λ¦΄ κ²½μ° μμ λ°μ΄ν°μ νΌλ²μ μμΉλ₯Ό λ³κ²½ν΄μ€λ€.
- μΌμͺ½μ 리μ€νΈμ μ€λ₯Έμͺ½μ 리μ€νΈμ λν΄ ν΅ μ λ ¬μ μνν΄μ€λ€. → μ¬κ·ν¨μ
- νμ¬ λ¦¬μ€νΈμ λ°μ΄ν° κ°μκ° 1κ°μΈ κ²½μ° μ¬κ·ν¨μλ₯Ό μ’ λ£νλ€.
νκ· μκ° λ³΅μ‘λλ O(NlogN)μ΄λ€. νμ§λ§ 'μ΄λ―Έ λ°μ΄ν°κ° μ λ ¬λμ΄ μλ κ²½μ°'μλ λ§€μ° λλ¦¬κ² λμν¨μ μ£Όμν΄μΌνλ€.
array = [5, 7, 9, 0, 3, 1, 6, 2, 4, 8]
def quick_sort(array):
# 리μ€νΈκ° νλ μ΄νμ μμλ§μ λ΄κ³ μλ€λ©΄ μ’
λ£
if len(array) <= 1:
return array
pivot = array[0] # νΌλ²μ 첫 λ²μ§Έ μμ
tail = array[1:] # νΌλ²μ μ μΈν 리μ€νΈ
left_side = [x for x in tail if x <= pivot] # λΆν λ μΌμͺ½ λΆλΆ
right_side = [x for x in tail if x > pivot] # λΆν λ μ€λ₯Έμͺ½ λΆλΆ
# λΆν μ΄ν μΌμͺ½ λΆλΆκ³Ό μ€λ₯Έμͺ½ λΆλΆμμ κ°κ° μ λ ¬μ μννκ³ , μ 체 리μ€νΈλ₯Ό λ°ν
return quick_sort(left_side) + [pivot] + quick_sort(right_side)
print(quick_sort(array))
π non-Comparisons Sorting Algorithm
π κ³μ μ λ ¬ (Counting Sort)
λ°μ΄ν°μ ν¬κΈ° λ²μκ° μ νλμ΄ μ μ ννλ‘ ννν μ μμ λλ§ μ¬μ© κ°λ₯νλ€.
→ λ°μ΄ν°μ κ°μκ° λ§€μ° λ§λλΌλ λΉ λ₯΄κ² λμνλ€.
μΌλ°μ μΌλ‘ κ°μ₯ ν° λ°μ΄ν°μ κ°μ₯ μμ λ°μ΄ν°μ μ°¨μ΄κ° 1,000,000μ λμ§ μμ λ ν¨κ³Όμ μΌλ‘ μ¬μ©ν μ μλ€.
λμΌν κ°μ κ°μ§λ λ°μ΄ν°κ° μ¬λ¬ κ° λ±μ₯ν λ μ ν©νλ€.
- κ°μ₯ ν° λ°μ΄ν°μ κ°μ₯ μμ λ°μ΄ν°μ λ²μκ° λͺ¨λ λ΄κΈΈ μ μλ νλμ 리μ€νΈ(λ±μ₯ νμλ₯Ό κΈ°λ‘)λ₯Ό μμ±νλ€.
- μ λ ¬ν λ°μ΄ν°λ₯Ό λλ©΄μ κ° λ°μ΄ν°μ λ±μ₯ νμλ₯Ό κΈ°λ‘νλ€.
- λ±μ₯ νμλ₯Ό κΈ°λ‘ν 리μ€νΈλ₯Ό λλ©΄μ μΆλ ₯νλ€.
λ°μ΄ν°μ κ°μκ° N, λ°μ΄ν° μ€ μ΅λκ°μ΄ KμΌ λ, κ³μ μ λ ¬μ μ΅μ μ κ²½μ°μλ μν μκ° O(N + K)λ₯Ό 보μ₯νλ€.
λ°μ΄ν°μ νΉμ±μ νμ νκΈ° μ΄λ ΅λ€λ©΄ ν΅ μ λ ¬μ μ΄μ©νλ κ²μ΄ μ 리νλ€.
# λͺ¨λ μμμ κ°μ΄ 0λ³΄λ€ ν¬κ±°λ κ°λ€κ³ κ°μ
array = [7, 5, 9, 0, 3, 1, 6, 2, 9, 1, 4, 8, 0, 5, 2]
# λͺ¨λ λ²μλ₯Ό ν¬ν¨νλ 리μ€νΈ μ μΈ(λͺ¨λ κ°μ 0μΌλ‘ μ΄κΈ°ν)
count = [0] * (max(array) + 1) # μ΅μκ°μ΄ 0μ΄ μλ κ²½μ° max(array) - min(array) + 1
# κ° λ°μ΄ν°μ ν΄λΉνλ μΈλ±μ€μ κ° μ¦κ°
for i in range(len(array)):
count[array[i]] += 1
# 리μ€νΈμ κΈ°λ‘λ μ λ ¬ μ 보 νμΈ
for i in range(len(count)):
for j in range(count[i]):
print(i, end=' ')
π λ λμ€ μ λ ¬ (Radix Sort)
Ref.
- μ΄κ²μ΄ μ·¨μ μ μν μ½λ© ν μ€νΈλ€ with νμ΄μ¬
'CS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[OS] 리λ μ€ κ³Όμ ν λ νμν λͺ λ Ήμ΄ (0) | 2021.10.28 |
---|---|
[CS/μκ³ λ¦¬μ¦] νμλ² (그리λ, Greedy) (0) | 2021.07.19 |
μ€λ₯ (Error), κ²°ν¨ (Defect), μ₯μ (Failure) (0) | 2020.08.04 |
Assembly Intel Manual (0) | 2020.04.21 |
Addressing Modes (0) | 2020.04.21 |