[C++] Sorting-3

Connected Brain·2025년 12월 10일

Sorting

7. Heap Sort

개념

  • Heap 자료 구조를 활용한 정렬
  • Heap Tree에 모든 자료를 입력한 후 이를 다시 제거해 정렬을 실시

정리

  • Unstable & External Sort
  • Merge Sort보다 메모리 효율적이며 Quick Sort보다 예상가능한 실행 시간을 가짐
  • Quick Sort보다 느릴 수 있지만 보다 안정적이고 예측가능하다는 장점

8. Radix Sort

개념

  • 비교 연산 없이 자릿수를 통해 정렬을 실시
  • 비교 기반 연산은 O(n * log₂n)보다 빠를 수 없지만 Radix Sort는 가능함
  • 연산을 위해 추가적인 메모리 공간을 필요로 함

구현

1자리 숫자만 가진 배열일 경우

  • 0~9까지의 배열을 구성한 후, 정렬하려는 배열의 각각의 값을 인덱스로 하는 위치에 값을 저장
  • 이후 해당 배열을 그대로 출력하면 정렬된 상태를 유지
    (자릿수가 늘어나면 같은 작업을 자릿수별로, 낮은 자릿수부터 실시)

정리

  • d의 자릿수를 가진 값들을 가진 배열이 n개의 요소를 가질 경우 O(d * n)의 시간 복잡도를 가짐
    (일반적으로 dn보다 작은 경우가 많으므로 O(n))
  • 그러나 사용할 수 있는 경우가 제한적; 숫자, 알파벳 등
  • Stable & External Sort

9. Counting Sort

개념

  • 최댓값이 정해진 요소들에 대해서 사용가능
  • 각각의 값이 얼마나 자주 등장했는지를 통해 값을 정렬
  • 비교 기반 정렬이 아니므로 O(n + k)의 복잡도를 가지며, 여기서 k는 가능한 값의 범위

구현

  1. 해당 배열의 최대 값을 찾음
  2. 최대값을 크기로 하는 배열을 새로 구성
  3. 이후 주어진 배열에서 각각의 값이 얼마나 자주 등장했는지를 최대값 크기 배열에 입력
  4. 최대값 크기 배열을 누적된 형태로 연산
  5. 해당 배열을 기준으로 정렬 실시

정리

  • 시간 복잡도와 메모리 공간 모두 O(n + k)
  • 범위가 정해진 정수 배열에서 효과적
  • Stable & External Sort
  • kn보다 지나치게 큰 경우 메모리 공간 활용이 비효율적일 수 있음(빈 곳이 많아짐)

0개의 댓글