int max_bit(int a[], int size)
{
int max;
for (int i = 1, max = a[0]; i < size; i++)
{
if (a[i] > max)
{
max = a[i];
}
}
int b = 1;
while (max / 10)
{
b++;
max /= 10;
}
return b;
}
void radix_sort(int a[], int size)
{
int d = max_bit(a, size);
int i, j, k;
int range = 10;
int radix = 1;
int *c = (int *)malloc(sizeof(int) * range);
int *b = (int *)malloc(sizeof(int) * size);
for(i = 0; i < d; i++, radix *= 10)
{
for(j = 0; j < range; j++)
{
c[j] = 0;
}
for(j = 0; j < size; j++)
{
k = (a[j] / radix) % 10;
c[k]++;
}
for(j = 1; j < range; j++)
{
c[j] += c[j-1];
}
for(j = size - 1; j >= 0; j--)
{
k = (a[j] / radix) % 10;
b[c[k] - 1] = a[j];
c[k]--;
}
for(j = 0; j < size; j++)
{
a[j] = b[j];
}
}
free(c);
free(b);
}