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

  }

}