[c++] 카운팅 정렬(Counting Sort) 알고리즘

카운팅 정렬(Counting Sort) 알고리즘은 원소의 크기가 일정한 경우에 빠르게 정렬하는 알고리즘 중 하나입니다. 이 알고리즘은 각 값의 출현 횟수를 세어 정렬하는 방식으로 동작합니다.

알고리즘 설명

카운팅 정렬 알고리즘은 다음과 같은 단계로 동작합니다.

  1. 입력 배열을 순회하며 각 값의 출현 횟수를 센다.
  2. 출현 횟수를 누적하여 뒤에서부터 정렬된 위치를 계산한다.
  3. 정렬된 위치에 값을 배치하고 출현 횟수를 감소시킨다.

카운팅 정렬 알고리즘은 추가적인 공간을 사용하여야 하지만, 시간 복잡도가 O(n)으로 매우 효율적입니다.

C++ 코드 예제

#include <iostream>
#include <vector>

void countingSort(std::vector<int>& arr) {
    int maxVal = *std::max_element(arr.begin(), arr.end());
    std::vector<int> count(maxVal + 1, 0);
    std::vector<int> result(arr.size());

    for (int i = 0; i < arr.size(); ++i) {
        count[arr[i]]++;
    }

    for (int i = 1; i <= maxVal; ++i) {
        count[i] += count[i - 1];
    }

    for (int i = arr.size() - 1; i >= 0; --i) {
        result[count[arr[i]] - 1] = arr[i];
        count[arr[i]]--;
    }

    arr = result;
}

int main() {
    std::vector<int> arr = {4, 2, 2, 8, 3, 3, 1};
    countingSort(arr);

    std::cout << "Sorted array: ";
    for (int num : arr) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

위 코드는 C++을 이용하여 카운팅 정렬 알고리즘을 구현한 예제입니다.

참고 자료