Java Bubble-Sort Není kontrola poslední smyčku přes

0

Otázka

Snažím se třídit ArrayList, ale narazil na zeď v tuto chvíli nemáme. Níže, mám getId() funkci, která načte id člena. Chci řadit ArrayList členské id. Ověřil jsem si, a pár dobrých článků na toto a realizovány následující :

e.g (než druh) 11 22 33 44 55 66 77 88 99 00

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

Udělal jsem výtisk prohlášení výše vystopovat příčinu, ale stále se snaží přijít na chybu.

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

Nejlepší odpověď

2

Kód pro swapování je špatně:

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

Zde si pouze vyměnit s s t, ale údaje základní members nejsou ovlivněny. Ten správný:

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

Děkuji za rad. Myslím, že jsem se tam dostat. Já používám s = studentů.set(i, t); a zdá se, aktualizace no ale podmínkou je aktualizace všech hodnot 1010 místo.
Enthu

Ah, vidím, že můžeme používat Kolekce.swap které jsem nebyl vědom. Můžete mi to vysvětlit trošku více členů.size() - 1 a členů.size() - i - 1. Není podmínkou, stejný jako ten, publikováno, nebo jsem chybí?
Enthu

@Enthu obávám se, že máte nějaké nedorozumění o bubble sort. Srovnání a vyměnit pouze mezi sousedními prvky.
chenzhongpu

Děkuji @chenzhongpu. Budu přečtěte si více o tomto. Děkuji moc za pomoc! To bylo opravdu užitečné pro mě.
Enthu

V jiných jazycích

Tato stránka je v jiných jazycích

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