개발자 HOON
πŸ› HOON DEVLog
개발자 HOON
전체 방문자
였늘
μ–΄μ œ
  • 😎 전체 μΉ΄ν…Œκ³ λ¦¬ (137)
    • πŸ“ μ‹ μž… 인터뷰 μ€€λΉ„ (7)
    • πŸ¦” μ·¨μ—…μ€€λΉ„ 기둝 (7)
    • β˜• μžλ°” : JAVA (5)
    • 🐍 μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ : PS (80)
    • 🌱 λ°±μ—”λ“œ : Backend (13)
    • πŸ§ͺ 컴퓨터과학 : CS (11)
    • πŸ—‚ λ°μ΄ν„°λ² μ΄μŠ€ : DB (1)
    • πŸƒ‍♂️ DEVLOG (8)
    • βš™οΈ Trouble Shooting (5)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • GitHub
  • Resume

곡지사항

인기 κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
개발자 HOON

πŸ› HOON DEVLog

[Algorithm] νž™ μ •λ ¬ (Heap Sort)
πŸ§ͺ 컴퓨터과학 : CS

[Algorithm] νž™ μ •λ ¬ (Heap Sort)

2022. 9. 3. 14:51

νž™ μ •λ ¬ (Heap Sort)

νž™ 정렬은 μ‹œκ°„ λ³΅μž‘λ„κ°€ O(NlogN)인 μ •λ ¬μœΌλ‘œ, 버블 / 선택 / μ‚½μž… 정렬에 λΉ„ν•΄ μš°μˆ˜ν•œ μ„±λŠ₯을 κ°€μ§€κ³  μžˆλ‹€.

 

μš°μ„  νž™ 정렬을 μ‚΄νŽ΄λ³΄μž.

νž™μ€ 자료ꡬ쑰 쀑 ν•˜λ‚˜λ‘œ, 이 'Heap' 자료ꡬ쑰의 νŠΉμ„±μ„ ν™œμš©ν•œ μ •λ ¬ 방법이닀.

νž™μ€ μ™„μ „ μ΄μ§„νŠΈλ¦¬μ˜ μΌμ’…μœΌλ‘œ, μ—¬λŸ¬ κ°’λ“€ μ€‘μ—μ„œ μ΅œμ†Ÿκ°’ ν˜Ήμ€ μ΅œλŒ“κ°’μ„ λΉ λ₯΄κ²Œ μ°ΎκΈ° μœ„ν•΄ μ„€κ³„λœ μžλ£Œκ΅¬μ‘°μ΄λ‹€.

νž™μ€ λŠμŠ¨ν•œ μ •λ ¬ μƒνƒœ(반 μ •λ ¬ μƒνƒœ)λ₯Ό μœ μ§€ν•˜κ³ , 이λ₯Ό μ‰½κ²Œ ν’€μ΄ν•˜λ©΄ λΆ€λͺ¨ λ…Έλ“œμ˜ ν‚€ κ°’이 μžμ‹ λ…Έλ“œμ˜ ν‚€ κ°’보닀 ν•­μƒ ν°(μž‘μ€) μ΄μ§„ νŠΈλ¦¬λ₯Ό λ§ν•œλ‹€.

λΆ€λͺ¨ λ…Έλ“œμ˜ ν‚€ 값이 μžμ‹ λ…Έλ“œμ˜ ν‚€ 값보닀 큰 μ§€, μž‘μ€ 지에 따라 νž™μ˜ μ’…λ₯˜κ°€ λ‚˜λ‰œλ‹€.

- μ΅œλŒ€ νž™ (Max Heap) : λΆ€λͺ¨ λ…Έλ“œμ˜ ν‚€ 값이 μžμ‹ λ…Έλ“œμ˜ ν‚€ 값보닀 큰 νž™ → 루트 λ…Έλ“œμ— κ°€μž₯ 큰 μ›μ†Œκ°€ μœ„μΉ˜ν•˜κ²Œ λœλ‹€.

- μ΅œμ†Œ νž™ (Min Heap) : λΆ€λͺ¨ λ…Έλ“œμ˜ ν‚€ 값이 μžμ‹ λ…Έλ“œμ˜ ν‚€ 값보닀 μž‘μ€ νž™ → 루트 λ…Έλ“œμ— κ°€μž₯ μž‘μ€ μ›μ†Œκ°€ μœ„μΉ˜ν•˜κ²Œ λœλ‹€.

 

 

νž™ μ •λ ¬μ˜ μ•Œκ³ λ¦¬μ¦˜μ„ λ‹¨μˆœν•˜κ²Œ λ‚˜νƒ€λ‚΄λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

1. μ •λ ¬ν•˜κ³ μž ν•˜λŠ” 배열을 νž™μœΌλ‘œ λ§Œλ“ λ‹€. (이 과정을 heapify라고 ν•œλ‹€.)
2. μ •λ ¬λœ μ›μ†Œλ“€μ΄ μ €μž₯될 μƒˆλ‘œμš΄ 배열을 μƒμ„±ν•œλ‹€. (이 배열을 μ •λ ¬ 배열이라 λΆ€λ₯΄μž.)
3. νž™μ˜ λ£¨νŠΈλ…Έλ“œμ˜ 값을 μ •λ ¬ 배열에 appendν•˜κ³ , 루트 λ…Έλ“œμ˜ 값을 μ‚­μ œν•œλ‹€.
4. μ‚­μ œ ν•œ ν›„ λ‚˜λ¨Έμ§€ νŠΈλ¦¬μ— λŒ€ν•΄μ„œ λ‹€μ‹œ νž™μœΌλ‘œ λ§Œλ“ λ‹€. (heapify)
5. νž™μ— 남은 μ›μ†Œκ°€ ν•˜λ‚˜λ„ 없을 λ•ŒκΉŒμ§€ 3~4번 과정을 λ°˜λ³΅ν•œλ‹€.
6. νž™μ— 남은 μ›μ†Œκ°€ μ—†μœΌλ©΄, μ •λ ¬ λ°°μ—΄ 속 μ›μ†Œλ“€μ€ λͺ¨λ‘ 정렬이 λ˜μ–΄μžˆλ‹€. (Min Heap의 경우 μ˜€λ¦„μ°¨μˆœ, Max Heap의 경우 λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ 정렬이 λœλ‹€.)

 

νž™ μ •λ ¬ 파이썬 μ½”λ“œ

 

 

νž™ μ •λ ¬ μžλ°” μ½”λ“œ

 

 

νž™ μ •λ ¬ μž₯단점

μž₯점

  • 항상 O(NlogN)을 보μž₯
  • max λ˜λŠ” min 값을 ꡬ할 λ•Œ μ‹œκ°„ λ³΅μž‘λ„λŠ” O(1)이닀.

단점

  • 일반적으둜 μ†λ„λ§Œ λΉ„κ΅ν•˜μžλ©΄ 퀡이 ν‰κ· μ μœΌλ‘œ 더 λΉ λ₯΄λ‹€. κ·Έλž˜μ„œ 잘 μ‚¬μš©ν•˜μ§€ μ•ŠμŒ.
μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ 동일쑰건 (μƒˆμ°½μ—΄λ¦Ό)

'πŸ§ͺ 컴퓨터과학 : CS' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[자료ꡬ쑰] Array와 LinkedList의 차이 (인터뷰 λŒ€λΉ„)  (0) 2022.10.23
[κ°œλ°œκ³΅ν†΅] Call by value와 Call by reference (Java, Python, C/C++)  (0) 2022.10.11
[Alogrithm] μ‚½μž… μ •λ ¬ (Injection Sort)  (0) 2022.09.03
[Algorithm] 선택 μ •λ ¬ (Selection Sort)  (0) 2022.09.03
[Algorithm] 버블 μ •λ ¬ (Bubble Sort)  (0) 2022.09.03
    'πŸ§ͺ 컴퓨터과학 : CS' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [자료ꡬ쑰] Array와 LinkedList의 차이 (인터뷰 λŒ€λΉ„)
    • [κ°œλ°œκ³΅ν†΅] Call by value와 Call by reference (Java, Python, C/C++)
    • [Alogrithm] μ‚½μž… μ •λ ¬ (Injection Sort)
    • [Algorithm] 선택 μ •λ ¬ (Selection Sort)
    개발자 HOON
    개발자 HOON
    쒋은 λ°±μ—”λ“œ μ—”μ§€λ‹ˆμ–΄κ°€ 되기 μœ„ν•œ 기둝을 λͺ¨μ•˜μŠ΅λ‹ˆλ‹€. # μ£Όλ‹ˆμ–΄ # λ°±μ—”λ“œ # 개발자

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”