Java Bubble-Sort Nie kontrola poslednú slučku cez

0

Otázka

Snažím sa zoradiť o ArrayList ale narazil do steny v súčasnosti. Nižšie, mám getId() funkcia, ktorá načíta id člena. Chcem zoradiť ArrayList členské id. Mám skontrolovali afew dobré články na tejto a realizovať nasledovné :

e.g (pred sort) 11 22 33 44 55 66 77 88 99 00

e.g (po sort) 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;
        }
     }
  }
}

Urobil som, protokol vyhlásenia nad sledovať príčinu, ale stále sa snaží zistiť chybu.

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

Najlepšiu odpoveď

2

Kód pre prečerpanie je zle:

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

Tu si len vymeniť s s t,, ale základné údaje members nie sú ovplyvnené. Správne:

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

Ďakujem za pripomienky. Myslím, že som stále tam. Ja používam s = študentov.set(i, t) a jej sa zdá, že na aktualizáciu dobre, ale podmienkou je aktualizovať všetky hodnoty na 1010 miesto.
Enthu

Ah vidím, že môžeme použiť na Zhromažďovanie.swap, ktorých som si nebol vedomý. Môžete vysvetliť, trochu viac na členov.veľkosť() - 1 a členov.veľkosť (v) - i - 1. Nie je stav rovnaký ako ten, publikované alebo som chýba?
Enthu

@Enthu obávam sa, že máte nejaké nedorozumenie, o bubble sort. Porovnanie a vymeniť len stalo medzi susediacimi prvkami.
chenzhongpu

Ďakujeme, že ste @chenzhongpu. Budem prečítať viac o tomto. Ďakujem veľmi pekne za pomoc! Bolo to naozaj užitočné pre mňa.
Enthu

V iných jazykoch

Táto stránka je v iných jazykoch

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