Matriz especie deja un elemento en la posición incorrecta

Abdirahman Hashi:

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
John Kugelman:

Hay dos problemas principales.

Una es que estás cambiando algunos elementos en dos ocasiones. Usted quiere asegurarse siempre de que ies menos de jmodo que numbers[i]está a la izquierda de numbers[j]. La forma en que sus bucles funcionan, en iteraciones posteriores jempieza a ser inferior al i. Por ejemplo, cuando ies 2 los bucles internos se inicia con jel 1. Para solucionar este problema siempre se puede empezar jen 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])

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=179291&siteId=1
Recomendado
Clasificación