Estoy tratando de ordenar una matriz en orden ascendente y me encontré con un problema. El código ordena la matriz, pero se necesita el último número y lo coloca en la primera posición de la matriz. Así, por ejemplo, al ordenar la salida se 2,3,4,1 4, 1, 2, 3. ¿Cómo tomo el número 4 y moverlo detrás del número 3?
public class Main {
public static void main(String[] args) {
int[] numbers = {2, 3, 1, 4};
int holder = 0;
for(int i = 0; i < numbers.length; i++){
for(int j = 1; j < numbers.length; j++){
if(numbers[i] < numbers[j]){
holder = numbers[i];
numbers[i] = numbers[j];
numbers[j] = holder;
}
}
}
// prints array
for(int i = 0; i < numbers.length; i++){
System.out.println(numbers[i]);
}
}
}
Salida:
4
1
2
3
Hay dos problemas principales.
Una es que estás cambiando algunos elementos en dos ocasiones. Usted quiere asegurarse siempre de que i
es menos de j
modo que numbers[i]
está a la izquierda de numbers[j]
. La forma en que sus bucles funcionan, en iteraciones posteriores j
empieza a ser inferior al i
. Por ejemplo, cuando i
es 2 los bucles internos se inicia con j
el 1. Para solucionar este problema siempre se puede empezar j
en 1 lugar más alto que i
:
for(int j = i + 1; j < numbers.length; j++) {
Si se fija que usted notará el segundo problema: la matriz se ordena a la inversa! Eso es porque la <
comparación es al revés. ¿Quieres elementos de intercambio cuando el izquierdo es más grande que la derecha, no cuando es más pequeño. Si es más pequeño que ya están en el orden correcto.
if(numbers[i] > numbers[j])