위키득계정 ↗
기술

계수 정렬

계수 정렬기술
영문명
Counting sort
핵심 정보
키별 출현 횟수
기본 시간
O(n+k), 키 범위 크기 k
주요 비용
키 범위에 대응하는 보조 공간
계수 정렬은 각 키가 나타나는 횟수를 세고 그 정보를 이용해 원소를 배치하는 정렬 알고리즘이다. 정수 키의 범위가 원소 수에 비해 작을 때 유용하다.

개수를 세기

입력이 2, 0, 2, 1이면 0과 1은 한 번씩, 2는 두 번 나타난다. 숫자만 정렬한다면 이 횟수대로 0, 1, 2, 2를 출력할 수 있다. 원소 사이의 대소 비교를 반복하는 방식과 다르다.

기록 전체를 배치하기

키에 이름 같은 추가 정보가 붙은 기록을 정렬할 때에는 숫자를 재생성하는 것만으로 충분하지 않다. 누적 개수로 키별 위치 범위를 정하고 각 원소를 그 위치에 배치한다. 같은 키의 순서를 보존하도록 안정적인 구현을 만들 수 있다.

범위가 중요한 이유

원소가 n개이고 가능한 키가 0부터 k−1까지라면 개수 배열의 크기도 k에 의존한다. 입력 원소가 적어도 키 범위가 매우 넓으면 공간과 초기화 비용이 커진다. 단순히 정수 입력이라는 이유만으로 항상 적합한 것은 아니다.

기수 정렬과의 연결

키 전체 대신 특정 자리의 값을 기준으로 계수 정렬을 수행할 수 있다. 아래 자리부터 처리하는 기수 정렬에서는 각 단계의 안정성을 유지하여 이전 자리의 순서 정보를 보존한다.

관련 문서

정렬 알고리즘 / 배열 / 안정 정렬 / 기수 정렬 / 시간 복잡도 / 정수 / 버블 정렬