Java Bubble-Sort Nu am verificat ultima bucla prin

0

Problema

Am încercat pentru a sorta un ArrayList dar lovit de un zid în momentul de față. Mai jos, am o getId() funcție care preia id-ul de membru. Vreau să sortați ArrayList de membru de identitate. Am verificat-o cateva articole bune pe aceasta și implementate următoarele :

e.g (înainte de fel) 11 22 33 44 55 66 77 88 99 00

e.g (după sortare) 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;
        }
     }
  }
}

Am făcut imprimarea declarațiile de mai sus pentru a depista cauza, ci încă mai încearcă să dau seama de eroare.

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

Cel mai bun răspuns

2

Codul de pompare este greșit:

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

Aici tine doar de swap s cu t, dar datele de fond al sistemului members nu sunt afectate. Cel corect:

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

Multumesc pentru sfaturi. Cred că sunt obtinerea acolo. Eu sunt, folosind s = studenți.set(i, t); și se pare că pentru a actualiza bine dar condiția face update la toate valorile la 1010 în loc.
Enthu

Ah, văd că ne putem folosi de Colectare.swap care nu am fost conștient de. Poti explica un pic mai pe membri.size() - 1 și membri.size() - i - 1. Nu este o condiție la fel ca cel postat sau sunt lipsă?
Enthu

@Entuziasmul mi-e teamă că aveți o neînțelegere despre bubble sort. Compararea și swap numai întâmpla între elementele adiacente.
chenzhongpu

Multumesc @chenzhongpu. Voi citi mai multe despre acest lucru. Vă mulțumesc foarte mult pentru sprijinul acordat! A fost foarte util pentru mine.
Enthu

În alte limbi

Această pagină este în alte limbi

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