🎹 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ 🎹

λ°•μ§„Β·2026λ…„ 2μ›” 5일

2026.02.05 (λͺ©)
μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜


μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ— λŒ€ν•΄ μžμ„Έν•˜κ²Œ κ³΅λΆ€ν•΄λ³΄μž!
μ–΄μ œ κ³΅λΆ€ν•œ λ‚΄μš© λ‹€μ‹œ ν•œλ²ˆ κ³΅λΆ€ν•˜λ©΄μ„œ 더 잘 이해할 수 μžˆλ„λ‘ κ·Έλž˜ν”„λ₯Ό 그렀보며 곡뢀해봀닀


πŸš₯ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜

μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ λ¬΄μž‘μœ„λ‘œ λ‚˜μ—΄λœ 데이터 집합을 νŠΉμ • κΈ°μ€€(였λ₯Έμ°¨μˆœ λ˜λŠ” λ‚΄λ¦Όμ°¨μˆœ)에 따라 μΌμ •ν•œ μˆœμ„œλ‘œ μž¬λ°°μ—΄ν•˜λŠ” 일련의 과정을 μ˜λ―Έν•œλ‹€.

λ°μ΄ν„°μ˜ ν˜•νƒœμ— 따라 숫자 크기순, 문자 μ‚¬μ „μˆœ λ“±μœΌλ‘œ μ •λ ¬ν•  수 있으며, 효율적인 정렬은 μ΄ν›„μ˜ 데이터 처리 속도λ₯Ό κ²°μ •μ§“λŠ” 핡심적인 μ„ ν–‰ 단계이닀.


πŸ“„ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜λŠ” 핡심 이유

λ‹¨μˆœνžˆ 보기 μ’‹κ²Œ λ‚˜μ—΄ν•˜λŠ” 것을 λ„˜μ–΄, 정렬은 μ‹œμŠ€ν…œμ˜ μ „λ°˜μ μΈ μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•΄ ν•„μˆ˜μ μ΄λ‹€.

πŸ“• 탐색 μ„±λŠ₯의 κ·ΉλŒ€ν™”

데이터가 μ •λ ¬λ˜μ–΄ μžˆμ§€ μ•ŠμœΌλ©΄ νŠΉμ • 값을 μ°ΎκΈ° μœ„ν•΄ μ²˜μŒλΆ€ν„° λκΉŒμ§€ ν™•μΈν•˜λŠ” μ„ ν˜• 탐색을 ν•΄μ•Όν•œλ‹€. ν•˜μ§€λ§Œ μ •λ ¬λœ λ°μ΄ν„°μ—μ„œλŠ” 이진탐색을 μ‚¬μš©ν•  수 μžˆμ–΄ 탐색 속도가 빨라진닀.

  • λ―Έμ •λ ¬ μƒνƒœ : O(n)O(n)
  • μ •λ ¬ μƒνƒœ : O(log⁑n)O(\log n)

πŸ“— 데이터 처리 νš¨μœ¨μ„± ν–₯상

  • 쀑볡 제거 : μ •λ ¬λœ λ°μ΄ν„°μ—μ„œλŠ” μΈμ ‘ν•œ μš”μ†ŒλΌλ¦¬ λΉ„κ΅ν•˜μ—¬ μ€‘λ³΅λœ ν•­λͺ©μ„ μ‰½κ²Œ μ°Ύμ•„λ‚Ό 수 μžˆλ‹€.
  • κ·Έλ£Ήν™”: νŠΉμ • 기쀀에 따라 데이터λ₯Ό λͺ¨μ•„μ„œ λΆ„μ„ν•˜κ±°λ‚˜ 톡계λ₯Ό λ‚Ό λ•Œ 정렬이 λ˜μ–΄ 있으면 μ²˜λ¦¬κ°€ κ°„κ²°ν•΄μ§„λ‹€.

πŸ“˜ λ‹€λ₯Έ μ•Œκ³ λ¦¬μ¦˜μ˜ 기반 기술

λ§Žμ€ 효율적인 μ•Œκ³ λ¦¬μ¦˜λ“€μ΄ 데이터가 μ •λ ¬λ˜μ–΄ μžˆμŒμ„ μ „μ œλ‘œ μž‘λ™ν•œλ‹€. 예λ₯Ό λ“€μ–΄, 두 데이터 μ§‘ν•©μ˜ ꡐ집합을 κ΅¬ν•œκ±°λ‚˜ μ΅œμ†Ÿκ°’/μ΅œλŒ“κ°’μ„ λΉ λ₯΄κ²Œ μΆ”μΆœν•΄μ•Ό ν•˜λŠ” λ‘œμ§μ—μ„œ 정렬은 ν•„μˆ˜μ μΈ μ „μ²˜λ¦¬ 과정이닀.

μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ„ 선택할 λ•ŒλŠ” λ‹¨μˆœνžˆ μ†λ„λΏλ§Œ μ•„λ‹ˆλΌ, μ‹œκ°„ λ³΅μž‘λ„(O(nlog⁑n)O(n \log n) vs O(n2)O(n^2))와 곡간 λ³΅μž‘λ„, 그리고 λ™μΌν•œ κ°’μ˜ μƒλŒ€μ  μˆœμ„œκ°€ μœ μ§€λ˜λŠ”μ§€ 여뢀인 μ•ˆμ •μ„±(Stability)을 μ’…ν•©μ μœΌλ‘œ κ³ λ €ν•΄μ•Ό ν•œλ‹€!


πŸ“š μ •λ ¬μ˜ 기쀀에 따라 μ •λ¦¬ν•΄λ³΄μž

πŸ“• μ•ˆμ •μ„± κΈ°μ€€

값이 같은 데이터가 μžˆμ„ λ•Œ, μ •λ ¬ μ „μ˜ μˆœμ„œκ°€ μœ μ§€λ˜λŠ”κ°€?

  • μ•ˆμ • μ •λ ¬: 병합 μ •λ ¬, μ‚½μž… μ •λ ¬
    • μ•ˆμ • 정렬을 μ“΄λ‹€λ©΄ 가격이 같은 μƒν’ˆλ“€λΌλ¦¬ μ—¬μ „νžˆ μ£Όλ¬Έ μΌμžμˆœμ„ μœ μ§€ν•  수 μžˆλ‹€.
  • λΆˆμ•ˆμ • μ •λ ¬ : 퀡정렬, νž™ μ •λ ¬
    • λΆˆμ•ˆμ • 정렬을 μ“΄λ‹€λ©΄ 가격이 같은 μƒν’ˆλ“€μ˜ μ£Όλ¬Έ 일자 μˆœμ„œκ°€ λ’€μ£½λ°•μ£½ μ„žμΌ 수 μžˆλ‹€.

πŸ“— 제자리 μ •λ ¬

데이터 정렬을 μœ„ν•΄ 좔가적인 λ©”λͺ¨λ¦¬ 곡간이 μ–Όλ§ˆλ‚˜ ν•„μš”ν•œκ°€?

  • 제자리 μ •λ ¬ : 퀡정렬, νž™ μ •λ ¬, 선택 μ •λ ¬
  • 제자리 정렬이 μ•„λ‹Œ 것 : 병합 μ •λ ¬

μ•„μ£Ό μž‘μ€ μ„Όμ„œ μž₯μΉ˜μ—μ„œλŠ” 좔가적인 λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•˜λŠ” 병합 μ •λ ¬λ³΄λ‹€λŠ” κΈ°μ‘΄ λ°°μ—΄ λ‚΄μ—μ„œ μœ„μΉ˜λ§Œ λ°”κΎΈλŠ” 제자리 μ •λ ¬ 방식이 훨씬 μœ λ¦¬ν•˜λ‹€.

πŸ“˜μ‹œκ°„ λ³΅μž‘λ„ κΈ°μ€€

데이터 양이 λ§Žμ•„μ§ˆ λ•Œ μ–Όλ§ˆλ‚˜ μ •μ²΄λ˜λŠ”κ°€?

  • λ‹¨μˆœν•œ μ •λ ¬ O(n2)O(n^2) : κ±°ν’ˆ μ •λ ¬, 선택 μ •λ ¬
  • 효율적인 μ •λ ¬ O(nlog⁑n)O(n \log n) : 퀡 μ •λ ¬, 병합 μ •λ ¬

데이터가 적을 λ•Œ : μ•Œκ³ λ¦¬μ¦˜μ΄ λ³΅μž‘ν•œ 퀡 정렬보닀 였히렀 λ‹¨μˆœν•œ μ‚½μž… 정렬이 더 λΉ λ₯Ό 수 μžˆλ‹€. μ‹€μ œλ‘œ λ§Žμ€ ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ΄ 데이터가 적을 땐 μ‚½μž… 정렬을 μ„žμ–΄μ„œ μ‚¬μš©ν•œλ‹€κ³  ν•œλ‹€..!

데이터가 λ§Žλ‹€λ©΄? λ°˜λ“œμ‹œ O(nlog⁑n)O(n \log n)의 νš¨μœ¨μ„ κ°€μ§„ 정렬을 써야 μ‹œμŠ€ν…œμ΄ λ©ˆμΆ”μ§€ μ•ŠλŠλ‹€!

πŸ“™λ°μ΄ν„°μ˜ 성격 κΈ°μ€€

데이터λ₯Ό μ„œλ‘œ λΉ„κ΅ν•˜λŠ”κ°€? μ•„λ‹ˆλ©΄ κ°’μ˜ νŠΉμ„±μ„ μ΄μš©ν•˜λŠ”κ°€?

  • 비ꡐ μ •λ ¬: μš°λ¦¬κ°€ ν”νžˆ μ•„λŠ” λŒ€λΆ€λΆ„μ˜ μ •λ ¬ (퀡, 병합 λ“±)
  • 비비ꡐ μ •λ ¬ : κ³„μˆ˜ μ •λ ¬, 기수 μ •λ ¬

수λŠ₯ μ„±μ ν‘œλ₯Ό μ²˜λ¦¬ν•  λ•Œ, μ μˆ˜λŠ” 0μ μ—μ„œ 100점 μ‚¬μ΄λ‘œ λ²”μœ„κ°€ μ •ν•΄μ Έ μžˆλ‹€. 이럴 λ•ŒλŠ” 숫자λ₯Ό ν•˜λ‚˜ν•˜λ‚˜ λΉ„κ΅ν•˜λŠ” 것보닀 0점뢀터 100μ κΉŒμ§€μ˜ 칸을 미리 λ§Œλ“€μ–΄λ‘κ³  μ μˆ˜λ³„λ‘œ 개수λ₯Ό μ„ΈλŠ” κ³„μˆ˜ 정렬을 μ“°λ©΄ O(n)O(n)μ΄λΌλŠ” 압도적인 μ†λ„λ‘œ 정렬이 λλ‚œλ‹€.


O(n)O(n) 상ν–₯ κ·Έλž˜ν”„

O(nlog⁑n)O(n \log n) 상ν–₯ κ·Έλž˜ν”„

λ‹€μŒμ—λŠ” μ‹œκ°„ λ³΅μž‘λ„μ™€ 곡간 λ³΅μž‘λ„μ— λ”°λ₯Έ κ·Έλž˜ν”„λ₯Ό 그렀봐야겠닀..!

0개의 λŒ“κΈ€