Java Burbuja de Ordenación de No comprobar el último bucle a través de

0

Pregunta

Estoy tratando de ordenar un ArrayList, pero golpeó un muro en el momento. A continuación, tengo un getId() función que recupera el id de miembro. Quiero ordenar el ArrayList por la identificación de miembro. He comprobado un pocos buenos artículos sobre este y ha implementado los siguientes :

e.g (antes de ordenar) 11 22 33 44 55 66 77 88 99 00

e.g (después de clase) 00 11 22 33 44 55 66 77 88 99

Member temp;

for (int i = 0; i < members.size(); i++) {
    Member s = members.get(i);
    System.out.println("S: "+s.getId());
            
    for (int j=0; j < members.size()-1; j++) {
        Member t = members.get(j+1);
        System.out.println("T: "+t.getId());
                
        if (s.getId() > t.getId()) {
        temp = s;
        s = t;
        t = temp;
        }
     }
  }
}

Me hizo la impresión de las declaraciones anteriores a la traza de la causa raíz, pero todavía tratando de averiguar el error.

bubble-sort java
2021-11-24 04:07:41
1

Mejor respuesta

2

El código para el intercambio está mal:

if (s.getId() > t.getId()) {
   temp = s;
   s = t;
   t = temp;
}

Aquí sólo swap s con tpero los datos subyacentes members no se ven afectados. La correcta:

for (int i = 0; i < members.size() - 1; i++) {
     for (int j = 0; j < members.size() - i - 1; j++) {
         Member s = members.get(j);
         Member t = members.get(j+1);
         if (s.getId() > t.getId()) {
             Collections.swap(members, j, j+1);
         }
    }
}
2021-11-24 04:35:16

Gracias por los punteros. Creo que me estoy haciendo allí. Estoy usando s = estudiantes.set(i, t); y su parece actualización de bien, pero la condición que hace es actualizar todos los valores de a 1010 lugar.
Enthu

Ah veo que podemos utilizar la Colección.swap de que yo no era consciente de. ¿Puedes explicar un poco más en los miembros.size() - 1 y de los miembros.size() - i - 1. No es la condición de la misma como el publicado o me estoy perdiendo?
Enthu

@Enthu me temo que usted tiene algunos malentendidos acerca de la ordenación de burbuja. La comparación y el intercambio sólo se producen entre elementos adyacentes.
chenzhongpu

Gracias @chenzhongpu. Voy a leer más sobre esto. Muchas gracias por la ayuda! Fue muy útil para mí.
Enthu

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................