peewoong 2024. 4. 13. 19:57

🟩 'νž™' 자료ꡬ쑰의 μž₯점을 ν™œμš©ν•œ μ •λ ¬

μ΅œλŒ€νž™ νŠΈλ¦¬λ‚˜ μ΅œμ†Œνž™ 트리λ₯Ό ꡬ성해 정렬을 ν•˜λŠ” 방법

λ‚΄λ¦Όμ°¨μˆœ 정렬을 μœ„ν•΄μ„œλŠ” μ΅œλŒ€νž™ (λ£¨νŠΈκ°€ κ°€μž₯ 큼)을 κ΅¬μ„±ν•˜κ³ 

μ˜€λ¦„μ°¨μˆœ 정렬을 μœ„ν•΄μ„œλŠ” μ΅œμ†Œνž™ (λ£¨νŠΈκ°€ κ°€μž₯ μž‘μŒ)을 κ΅¬μ„±ν•œλ‹€.

 

🟩 κ³Όμ •

1. n개의 λ…Έλ“œμ— λŒ€ν•œ μ™„μ „ 이진 트리 ꡬ성

2. μ΅œλŒ€νž™ ꡬ성

3. κ°€μž₯ 큰 수(λ£¨νŠΈμ— μœ„μΉ˜)λ₯Ό κ°€μž₯ 끝의 λ…Έλ“œμ™€ κ΅ν™˜

4. 2와 3을 반볡

🟩 μ‹œκ°„λ³΅μž‘λ„

νž™κ³Ό λ™μΌν•˜κ²Œ O(nlogn)

μ΅œλŒ€νž™μœΌλ‘œ λ§Œλ“œλŠ” κ³Όμ • O(logn), n개의 μ›μ†Œλ₯Ό λ‹€ μ •λ ¬ν•  λ•ŒκΉŒμ§€ 반볡 ν•˜λ―€λ‘œ

 

🟩 νŠΉμ§•

제자리 μ •λ ¬ (좔가적인 곡간이 ν•„μš”ν•˜μ§€ μ•ŠμŒ) πŸ‘‰ λ©”λͺ¨λ¦¬ μΈ‘λ©΄μ—μ„œ λͺΉμ‹œ 효율적 cf. 합병정렬

항상 μ‹œκ°„λ³΅μž‘λ„ O(nlogn)을 보μž₯

ν•˜μ§€λ§Œ λ‹¨μˆœνžˆ μ†λ„λ§Œ κ°€μ§€κ³  λΉ„κ΅ν•˜λ©΄ 퀡 정렬이 ν‰κ· μ μœΌλ‘œ λΉ λ₯΄κΈ° λ•Œλ¬Έμ— νž™ 정렬이 많이 μ‚¬μš©λ˜μ§€λŠ” μ•ŠμŒ

 

πŸš€ 퀡 μ •λ ¬κ³Όμ˜ 비ꡐ

λ‘˜ λ‹€ 같은 nlognμ΄μ§€λ§Œ, μ»΄ν“¨ν„°μ˜ ν•˜λ“œμ›¨μ–΄ ꡬ쑰상 퀡 정렬이 μ‹€μ œλ‘œ 더 λΉ λ₯΄λ‹€.

μ΄μœ λŠ” 퀡정렬은 데이터λ₯Ό 피벗을 κΈ°μ€€μœΌλ‘œ 쒌우둜 λ‚˜λˆ„μ–΄ μ •λ ¬ν•˜λŠ” λ°©μ‹μœΌλ‘œ, μ΅œμ„ μ˜ 경우 nlogn, μ΅œμ•…μ˜ 경우 n^2이닀. 반면, νž™μ •λ ¬μ˜ 경우 νž™ 트리 ꡬ쑰λ₯Ό μœ μ§€ν•˜λ©΄μ„œ 정렬을 μ§„ν–‰ν•˜κΈ° λ•Œλ¬Έμ— λͺ¨λ“  κ²½μš°μ— nlogn의 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό 보μž₯ν•œλ‹€.

κ·ΈλŸ¬λ‚˜ 퀡 정렬이 λŒ€κ°œ μ›μ†Œλ“€λΌλ¦¬ κ·Όμ ‘ν•œ λ©”λͺ¨λ¦¬ μ˜μ—­μ— λΆ™μ–΄ μžˆλŠ” 배열을 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— μΊμ‹œ νš¨μœ¨μ„± μΈ‘λ©΄μ—μ„œ 더 λΉ λ₯΄λ‹€. 반면 νž™ μ •λ ¬μ˜ 경우, μΊμ‹œ νš¨μœ¨μ„±μ΄ λ–¨μ–΄μ§„λ‹€λŠ” λ¬Έμ œμ™€ 일반적으둜 포인터 연산을 많이 μ‚¬μš©ν•˜μ—¬ λ°œμƒν•˜λŠ” μ˜€λ²„ν—€λ“œλ„ λ¬΄μ‹œν•  수 μ—†λ‹€.