본문 바로가기

TEST/자료구조와 함께 배우는 알고리즘 입문(C언어)

<6> Q24. 자료구조와 함께 배우는 알고리즘 입문 (C언어)

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

void fsort2(int a[], int n, int min, int max)
{
    int i;
    int *f = calloc(max - min + 2, sizeof(int));
    int *b = calloc(n, sizeof(int));

    for (i = 0; i <= max; i++)
        f[i] = 0;
    for (i = 0; i < n; i++)
        f[a[i]]++;
    for (i = min; i <= max; i++)
        f[i] += f[i - 1];
    for (i = n - 1; i >= 0; i--)
        b[--f[a[i]]] = a[i];
    for (i = 0; i < n; i++)
        a[i] = b[i];

    free(b);
    free(f);
}

int main(void)
{
    int i, nx;
    int *x;
    const int max = 100;
    const int min = 30;
    puts("도수 정렬");
    printf("요소 개수 : ");

    scanf("%d", &nx);
    x = calloc(nx, sizeof(int));
    printf("%d ~ %d의 정수를 입력하세요.\n", min, max);

    for (i = 0; i < nx; i++)
    {
        do
        {
            printf("x[%d] : ", i);
            scanf("%d", &x[i]);
        } while (x[i] < 0 || x[i] > max);
    }
    fsort2(x, nx, min, max);
    puts("오름차순으로 정렬했습니다.");

    for (i = 0; i < nx; i++)
        printf("x[%d] = %d\n", i, x[i]);

    free(x);

    return 0;
}