示例#1
0
    public static void Sort(int[] lista)
    {
        // Variables de estado
        int maxDigitos = Conteo.MaxDigitos(lista), digitoActual;

        int[]  ordenada = new int[lista.Length];
        Conteo conteo   = new Conteo();

        for (int dig = 1, len = lista.Length; dig <= maxDigitos; dig++)
        {
            // Recorrer de izquierda a derecha
            for (int i = 0; i < len; i++)
            {
                digitoActual = Conteo.Digito(lista[i], dig);
                conteo.arr[digitoActual]++;
            }

            conteo.Acumular();

            // Recorrer de derecha a izquierda
            for (int i = len - 1; i >= 0; i--)
            {
                digitoActual = Conteo.Digito(lista[i], dig);
                ordenada[--conteo.arr[digitoActual]] = lista[i];
            }

            conteo.Resetear();
            Array.Copy(ordenada, lista, len);
        }
    }