Java Bubble-Sort Bez sprawdzania ostatniego cyklu przez

0

Pytanie

Staram się sortować listę obiektów, ale w tej chwili natknął się na ścianę. Poniżej mam funkcja getId (), która pobiera identyfikator uczestnika. Chcę sortować listę elementów według identyfikatora uczestnika. Sprawdziłem kilka dobrych artykułów na ten temat i zrealizowała następujący :

na przykład (przed sortowaniem) 11 22 33 44 55 66 77 88 99 00

na przykład (po sortowaniu) 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;
        }
     }
  }
}

Wykonałem powyższe instrukcje dotyczące drukowania, aby prześledzić przyczyny, ale wciąż staram się znaleźć przyczynę błędu.

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

Najlepsza odpowiedź

2

Kod do wymiany jest prawidłowy:

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

Tutaj jesteś tylko sobą miejscami s z tale dane, leżące u podstaw members nie ma wpływu. Poprawny:

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

Dziękuję wam za porady. Myślę, że wrócę do tego. Używam s = students.set(i, t); i wydaje się, że dobrze jest aktualizowany, ale warunek sprawia, że zamiast zaktualizować wszystkie wartości do 1010.
Enthu

Ach, widzę, że możemy użyć Kolekcji.wymiana, o którym nie wiedziałem. Czy możesz wyjaśnić nieco więcej na temat members.size() - 1 i members.size() - i - 1. Czy warunek nie jest taki sam, jak publikująca, lub jestem nieobecny?
Enthu

@Enthu Obawiam się, że masz jakieś nieporozumienie co do pęcherzyków. Porównanie i wymiana odbywają się tylko pomiędzy sąsiednimi elementami.
chenzhongpu

Dziękuję @chenzhongpu. Przeczytam o tym więcej. Bardzo wam dziękuję za pomoc! To było bardzo pomocne dla mnie.
Enthu

W innych językach

Ta strona jest w innych językach

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