A C implementation of a Radix Sort
#include <limits.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
int rxsort(int *data, int size, int passes, int base)
{
int *counts, *temp;
int index, pval, i, j, n;
if ((counts = (int *)malloc(base * sizeof(int))) == NULL)
{
return -1;
}
if ((temp = (int *)malloc(size * sizeof(int))) == NULL)
{
return -1;
}
for (n = 0; n < passes; n++)
{
for (i = 0; i < base; i++)
counts[i] = 0;
pval = (int)pow((double)base, (double)n);
for (j = 0; j < size; j++)
{
index = (int)(data[j] / pval) % base;
counts[index] = counts[index] + 1;
}
for (i = 1; i < base; i++)
counts[i] = counts[i] + counts[i - 1];
for (j = size - 1; j >= 0; j--)
{
index = (int)(data[j] / pval) % base;
temp[counts[index] - 1] = data[j];
counts[index] = counts[index] - 1;
}
memcpy(data, temp, size * sizeof(int));
}
free(counts);
free(temp);
return 0;
}