Estoy tratando de ordenar los dígitos de un número entero de cualquier longitud en orden ascendente sin usar cadenas, matrices o recursividad.
Ejemplo:
Input: 451467
Output: 144567
Ya he descubierto cómo obtener cada dígito del entero con división de módulo:
int number = 4214;
while (number > 0) {
IO.println(number % 10);
number = number / 10;
}
pero no sé cómo ordenar los dígitos sin una matriz.
No te preocupes por la IO
clase; Es una clase personalizada que nuestro profesor nos dio.
En realidad, hay un algoritmo muy simple que usa solo enteros :
int number = 4214173;
int sorted = 0;
int digits = 10;
int sortedDigits = 1;
boolean first = true;
while (number > 0) {
int digit = number % 10;
if (!first) {
int tmp = sorted;
int toDivide = 1;
for (int i = 0; i < sortedDigits; i++) {
int tmpDigit = tmp % 10;
if (digit >= tmpDigit) {
sorted = sorted/toDivide*toDivide*10 + digit*toDivide + sorted % toDivide;
break;
} else if (i == sortedDigits-1) {
sorted = digit * digits + sorted;
}
tmp /= 10;
toDivide *= 10;
}
digits *= 10;
sortedDigits += 1;
} else {
sorted = digit;
}
first = false;
number = number / 10;
}
System.out.println(sorted);
se imprimirá 1123447
. La idea es simple:
Esa versión del algoritmo puede ordenar tanto en orden asc in desc, solo tiene que cambiar la condición.
Además, le sugiero que eche un vistazo a la llamada clasificación de radix , la solución aquí toma algunas ideas de la clasificación de radix, y creo que la clasificación de radix es el caso general de esa solución.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras