Java Bubble-Sıralama Son döngüyü kontrol etmiyor

0

Soru

Bir arraylist'i sıralamaya çalışıyorum ama şu anda bir duvara çarptım. Aşağıda, bir üyenin kimliğini alan bir getId() işlevim var. Arraylist'i üye kimliğine göre sıralamak istiyorum. Bununla ilgili birkaç iyi makaleyi kontrol ettim ve aşağıdakileri uyguladım :

örneğin (sıralamadan önce) 11 22 33 44 55 66 77 88 99 00

örneğin (sıralamadan sonra) 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;
        }
     }
  }
}

Kök nedenini izlemek için yukarıdaki çıktı ifadelerini yaptım, ancak yine de hatayı anlamaya çalışıyorum.

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

En iyi cevabı

2

Takas kodu yanlış:

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

Burada sadece takas s ile t ama veriler temel members etkilenmezler. Doğru olanı:

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

İşaretçiler için teşekkürler. Sanırım oraya geliyorum. S = öğrenci kullanıyorum.set (i, t) ; ve iyi güncelleniyor gibi görünüyor, ancak koşul bunun yerine tüm değerleri 1010'a güncellemesini sağlıyor.
Enthu

Koleksiyonu kullanabileceğimizi görüyorum.haberim yoktu ki takas. Biraz daha üyelerinde açıklayabilir misiniz.boyut() - 1 ve üyeler.boyut() - ı-1. Durum gönderilenle aynı değil mi yoksa kayıp mıyım?
Enthu

@ Enthu Korkarım bubble sort hakkında bir yanlış anlaşılma var. Karşılaştırma ve takas yalnızca bitişik öğeler arasında gerçekleşir.
chenzhongpu

Teşekkürler @ chenzhongpu. Bu konuda daha fazla okuyacağım. Yardımlarınız için çok teşekkür ederim! Benim için çok yardımcı oldu.
Enthu

Diğer dillerde

Bu sayfa diğer dillerde

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