본문 바로가기
알고리즘

계수 정렬(Counting Sort)

by 까망 하르방 2021. 3. 6.
반응형

계수 정렬(Counting Sort) → O(N)

- 숫자가 등장한 횟수를 세서 그 기준으로 정렬하는 방법
- 정렬하는 숫자가 특정한 범위안에 있을 때 사용할 수 있습니다.
   + 메모리 낭비가 있을 수 있습니다.
- 비교나 위치 교환 없이 정렬이 가능.
 

시뮬레이션

Array = [2, 4, 3, 0, 2, 3, 0, 3]
▷ 각 숫자의 등장 횟수
『 0 』 → 2번
『 1 』 → 0번
『 2 』 → 2번
『 3 』 → 3번
『 4 』 → 1번
 

구현

[C 언어 코드]
#include <stdio.h>
 
void countingSort(int arr[], int n, int count[]) {
    for (int i = 0; i < n; i++) {
        count[arr[i]]++;
    }
}
 
void main() {
    
    int n = 8;
    int arr[8] = { 2, 4, 3, 0, 2, 3, 0, 3};
    
    int count[5];
    for (int i = 0; i < 5; i++) {
        count[i] = 0;
    }
    countingSort(arr, n, count);
    
    for (int i = 0; i < 5; i++) {
        // 등장한 횟수를 출력
        printf("%d ", count[i]);
    }
}
 
 

시간 복잡도

계수 정렬의 시간복잡도는 O(N + K) 입니다. 
K는 정렬할 수들 중에 가장 큰 값을 의미합니다.
- K가 N보다 작은 수이면, O(N) 
- K가 N보다 매우 큰 수이면, O(무한)
  ex) N = 10, K = 100 → O(N2)

 

 

 

반응형

'알고리즘' 카테고리의 다른 글

힙 정렬 (Heap Sort)  (0) 2021.03.06
Binary Search (이분 탐색)  (0) 2021.03.06
LCP (Longest Common Prefix)  (0) 2021.03.06
[탐색] Parametric Search  (0) 2021.03.04
PS시 어떤 정렬을 선택하는 것이 좋을까?  (0) 2021.03.02

댓글