본문 바로가기
알고리즘

[알고리즘] 계수 정렬(Counting sort)

by hong0 2018. 6. 11.
반응형

계수 정렬(Counting sort)

 

#include <stdio.h>
#include <stdlib.h>

#define MAX_NUMBER 10000

int main()
{
    int maxnum =0, i = 0;
    int *arr = NULL, *sort = NULL, *cnt = NULL;

    scanf("%d", &maxnum);

    arr = (int*)calloc(maxnum, sizeof(int));
    sort = (int*)calloc(maxnum+1, sizeof(int));
    cnt = (int*)calloc(MAX_NUMBER, sizeof(int));

    //입력.
    for(i=0; i<maxnum; i++)
    {
        scanf("%d", &arr[i]);
    }

    //counting 배열.
    for(i=0; i<maxnum; i++)
    {
        cnt[arr[i]]++;
    }

    //누적합 배열.
    for(i=1; i<=maxnum; i++)
    {
        cnt[i] += cnt[i-1];
    }

    //결과 배열에 저장.
    for(i=0; i<maxnum; i++)
    {
        sort[cnt[arr[i]]] = arr[i];
        cnt[arr[i]]--;
    }

    for(i=1;  i<=maxnum; i++)
        printf("%d", sort[i]);

    free(arr);
    free(sort);
    free(cnt);

    return 0;
}
반응형

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

[알고리즘] DFS 경로찾기  (0) 2018.10.20
[알고리즘] BFS  (0) 2018.10.17
[알고리즘] DFS  (0) 2018.08.31
[알고리즘] 쿼드트리 (Quad Tree)  (0) 2018.07.31
[알고리즘] 퀵 정렬(Quick sort)  (0) 2018.05.14

댓글