Java Bubble-Sort, Non si verifica l'ultimo ciclo attraverso

0

Domanda

Sto cercando di ordinare un ArrayList, ma ha colpito un muro al momento. Qui di seguito, ho una getId() funzione che recupera l'id di un membro. Voglio ordinare la classe ArrayList da parte di id. Ho controllato un pochi di buoni articoli su questo e implementato il seguente :

e.g (prima di ordinare) 11 22 33 44 55 66 77 88 99 00

e.g (dopo l'ordinamento) 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;
        }
     }
  }
}

Ho fatto la stampa dichiarazioni di cui sopra per rintracciare la causa principale, ma ancora cercando di capire l'errore.

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

Migliore risposta

2

Il codice per lo scambio è sbagliato:

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

Qui è solo swap s con tma i dati sottostanti members non sono interessati. Quello corretto:

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

Grazie per i puntatori. Penso di arrivarci. Sto usando s = studenti.set(i, t); e la sua sembra di aggiornare bene, ma la condizione consente di aggiornare tutti i valori di 1010, invece.
Enthu

Ah vedo che siamo in grado di utilizzare la Collezione.swap di cui non ero a conoscenza. Puoi spiegare un po ' di più sui membri.size() - 1 e soci.size() - i - 1. Non è la condizione stessa di quello pubblicato o mi manca?
Enthu

@Entusiasmo ho paura di avere qualche incomprensione sull'ordinamento a bolle. Di confronto e di scambio solo accadere tra elementi adiacenti.
chenzhongpu

Grazie @chenzhongpu. Vorrei saperne di più su questo. Grazie mille per l'aiuto! E ' stato davvero utile per me.
Enthu

In altre lingue

Questa pagina è in altre lingue

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