Java Bubble-Сортировка Без проверки последнего цикла через

0

Вопрос

Я пытаюсь отсортировать список объектов, но в данный момент наткнулся на стену. Ниже у меня есть функция getId (), которая извлекает идентификатор участника. Я хочу отсортировать список элементов по идентификатору участника. Я проверил несколько хороших статей по этому вопросу и реализовал следующее :

например (перед сортировкой) 11 22 33 44 55 66 77 88 99 00

например (после сортировки) 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;
        }
     }
  }
}

Я выполнил приведенные выше инструкции по распечатке, чтобы проследить первопричину, но все еще пытаюсь выяснить причину ошибки.

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

Лучший ответ

2

Код для обмена неверен:

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

Здесь вы только меняетесь местами s с t, но данные, лежащие в основе members не затрагиваются. Правильный:

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

Спасибо вам за советы. Я думаю, что доберусь до этого. Я использую s = students.set(i, t); и он, похоже, хорошо обновляется, но условие заставляет его вместо этого обновить все значения до 1010.
Enthu

Ах, я вижу, что мы можем использовать Коллекцию.обмен, о котором я не знал. Можете ли вы объяснить немного больше о members.size() - 1 и members.size() - i - 1. Разве условие не такое же, как опубликованное, или я отсутствую?
Enthu

@Enthu Боюсь, что у вас какое-то недопонимание насчет пузырьков. Сравнение и обмен происходят только между соседними элементами.
chenzhongpu

Спасибо @chenzhongpu. Я прочитаю об этом подробнее. Большое вам спасибо за помощь! Это было действительно полезно для меня.
Enthu

На других языках

Эта страница на других языках

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