데이터 분석 기술 블로그

퀵 정렬 vs 병합 정렬 vs 힙 정렬 본문

데이터 사이언스/알고리즘

퀵 정렬 vs 병합 정렬 vs 힙 정렬

데이터분석가 이채은 2025. 2. 20. 13:12

상황에 따라 가장 적절한 정렬 알고리즘을 선택해야 한다.

  • 퀵 정렬(Quick Sort) → 일반적으로 가장 빠른 정렬 (O(n log n), 평균적)
  • 병합 정렬(Merge Sort) → 항상 안정적인 성능 보장 (O(n log n), 최악 포함)
  • 힙 정렬(Heap Sort) → 추가 메모리 없이 정렬 가능 (O(n log n), 안정 정렬 X)
상황 추천 정렬 알고리즘
일반적인 경우 (랜덤 데이터) 퀵 정렬 (Quick Sort)
이미 정렬된 데이터 병합 정렬 (Merge Sort)
Stable Sort(안정 정렬)이 필요할 때 병합 정렬 (Merge Sort)
추가 메모리 없이 정렬해야 할 때 힙 정렬 (Heap Sort)
우선순위 정렬이 필요할 때 힙 정렬 (Heap Sort)
Linked List를 정렬해야 할 때 병합 정렬 (Merge Sort)

퀵 정렬(Quick Sort) - "가장 일반적인 정렬"

랜덤한 데이터에서 가장 빠름 (O(n log n), 평균)
추가 메모리 사용 없이 제자리 정렬 (In-place, O(log n) 공간)
실무에서 많이 사용됨 (Python의 sorted()도 퀵 정렬 원리 일부 사용)

❌ 하지만, 이미 정렬된 데이터에서는 O(n²) 발생 가능 → 피벗 선택 중요!\

 

퀵 정렬이 적절한 경우

  • 일반적인 데이터 정렬 (대부분의 경우 최적)
  • 랜덤하게 섞인 데이터 (O(n log n))
  • 추가 메모리 없이 빠르게 정렬해야 할 때

2024.06.26 - [데이터 사이언스/알고리즘] - 퀵 정렬


병합 정렬(Merge Sort) - "안정적이고 항상 O(n log n) 보장"

최악의 경우에도 O(n log n) 보장 (정렬된 데이터에서도 성능 유지)
Stable Sort(안정 정렬) → 동일한 값을 가진 요소의 순서를 유지함
Linked List 정렬에도 적합 (추가 메모리를 써도 노드 이동이 쉽기 때문)

❌ 하지만, O(n) 추가 메모리 사용 → 공간 효율성 낮음

 

병합 정렬이 적절한 경우

  • 이미 정렬된 데이터에서도 성능이 유지되어야 할 때
  • Stable Sort(안정 정렬)이 필요한 경우
  • Linked List 정렬이 필요한 경우

2025.01.20 - [데이터 사이언스/알고리즘] - 병합 정렬 (Merge Sort)


3. 힙 정렬(Heap Sort) - "추가 메모리 없이 정렬 가능"

추가 메모리 없이 O(1) 공간으로 정렬 가능 → 대용량 데이터 정렬에 유리
최악의 경우에도 O(n log n) 보장
우선순위 큐(Priority Queue)와 잘 어울림

❌ 하지만, 실제 성능은 퀵 정렬보다 느릴 수 있음 (캐시 효율성 낮음)

 

힙 정렬이 적절한 경우

  • 추가적인 메모리 사용 없이 정렬이 필요한 경우
  • 우선순위 정렬이 필요한 경우 (예: Top-K 요소 찾기, Priority Queue)
  • 대용량 데이터에서 안정적인 O(n log n) 성능이 필요한 경우

2025.01.20 - [데이터 사이언스/알고리즘] - 힙 정렬 (Heap Sort)

 

'데이터 사이언스 > 알고리즘' 카테고리의 다른 글

이진 탐색(Binary Search)  (0) 2025.02.22
선형 탐색(Linear Search)  (0) 2025.02.21
Heapify  (0) 2025.02.19
완전 이진 트리 (Complete Binary Tree)  (0) 2025.02.18
힙 정렬 (Heap Sort)  (0) 2025.02.17