Algoritmo
1. rxsort(data, size, p, k)
variables:
counts[k], temp[size], pval, i, j, n
1.1 repetir n=0 hasta p
pval = a k^n
1.2 repetir j=0 hasta size
index = mod(data(j) / pval, k)
incrementar counts(index)
1.2 Fin
1.3 repetir i=1 hasta k
counts(i)= counts(i) + counts(i-1)
1.3 Fin
1.4 repetir j=size-1 hasta 0
index = mod(data(j) / pval, k)
decrementar counts(index)
temp ( counts(index) ) = data(j)
1.4 Fin
data = temp
1.1 Fin
Codigo ()
void radixsort(int *a, int n)
{
int i, b[MAX], m = 0, exp = 1, j=0;
for (i = 0; i < n; i++) //i es la posicion
{
if (a[i] > m) //determinamos cual es mayor
m = a[i];
}
while (m / exp > 0) //evaluamos dato en u,d,c
{
int bucket[N] = {0};
for (i = 0; i < n; i++)
bucket[a[i] / exp % 10]++;
for (i = 1; i < N; i++)
bucket[i] += bucket[i - 1];
for (i = n - 1; i >= 0; i--)
{
b[--bucket[a[i] / exp % 10]] = a[i];
}
for (i = 0; i < n; i++)
a[i] = b[i];
#ifdef SHOWPASS
j++;
printf("\nItera %d : ",j);
print(a, n);
printf("%d",exp);
#endif
exp *= 10; //incremento de 1 10 100 1000 etc
}
}