Является ли этот код правильной реализацией пузырьковой сортировки?

#java #sorting #bubble-sort

#java #сортировка #пузырьковая сортировка

Вопрос:

Для выполнения сортировки я использую следующий алгоритм пузырьковой сортировки. Верен ли этот алгоритм?

 for (int a = itemWiseBidderList.size() - 1; a > 1; a--)
{
    for (int j = 0; j < a; j  )
    { 
        if ((itemWiseBidderList.get(j).getRankInInt()) > (itemWiseBidderList.get(j   1).getRankInInt()))
        {
           Collections.swap(itemWiseBidderList, j, j   1);
        }
    }
}
  

Комментарии:

1. вы могли бы попробовать выполнить стандартную пузырьковую сортировку и посмотреть, правильна ли она?

2. Вы тестировали код? Он отсортировал itemWiseBidderList, как вы ожидали? Если да, то алгоритм верен, в противном случае он неисправен. В последнем случае сообщите нам, каков результат, и мы поможем вам. Если это первый случай, вы просто тратите наше время 😉

3. Что он делает, когда вы его тестируете?

4. Это не имеет значения, поскольку использовать Bubblesort вообще некорректно. Используйте метод сортировки, который поставляется с вашей коллекцией.

Ответ №1:

Если пузырьковая сортировка не является обязательным требованием (по домашнему заданию?), то правильный способ реализовать сортировку в Java — это вызвать

 Collections.sort(itemWiseBidderList);
  

Если элементы вашего списка реализуют Comparable , или

 Collections.sort(itemWiseBidderList, new Comparator() {
    public int compare(Object o1, Object o2) {
        // Compare o1, o2 .getRankInInt() here
    }
});
  

Это будет намного быстрее, чем пузырьковая сортировка.

Ответ №2:

Это псевдокод, вы можете проверить, верен ли ваш код:

 procedure bubbleSort( A : list of sortable items )
  n = length(A)
  for (i = 0; i < n; i  )
     /* back through the area bringing smallest remaining element to position i */
     for (j = n-1; j > i; j--)
        if A[j-1] > A[j] then
           swap(A[j-1], A[j])
        end if
     end for
  end for
end procedure
  

источник из Википедии

Ответ №3:

Он действительно кажется правильным (хотя я его НЕ тестировал), однако Collection предполагается, что он сопоставим, поэтому вам, вероятно, следует просто вызвать itemWiseBidderList.sort() .

Что это за тип данных itemWiseBidderList ?

Комментарии:

1. Collection не имеет sort() метода. Некоторые коллекции не могут быть отсортированы (например, Set ). Но в Collections