#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;
}