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); } }