Collections.sort & 冒泡排序

Collections.sort & Bubble sort

我使用两种不同的方式对 ArrayList 中的结果进行排序。第一种方法是 Collections.sort ,它工作得很好,所以没有问题。另一个是排序算法 Bubblesort(我知道它无效,用于研究目的)我有集合排序以对结果进行排序,最大值为 0,第二大值为 1 等。我想要我的冒泡排序算法,所以以相反的方式排序,最小值为 0 等。如前所述,集合排序工作正常,但我的冒泡排序没有按照我想要的方式对它们进行排序。

是我的方法还是循环错了?

private void sort(boolean resultComparison, ArrayList<Result> list) {
    if (resultComparison= false) {
        boolean moved;
        do {
            moved= false;
            for (int i = 1; i < list.size(); i++) {
                Result in = list.get(i - 1);
                Result de = list.get(i);
                if (in.value() < de.value()) {
                    list.set(i - 1, de);
                    list.set(i, in);
                    moved= true;
                }
            }
        } while (moved);
    } else {
        Collections.sort(list);
    }
}

布尔值 resultComparison 是我 class 的每个实例都有的属性,false 应该打印出从小到大的结果。

目前,您的冒泡排序正在按降序排序,最大值位于列表中的 0 索引处。这是因为如果第一个值小于第二个值,您将交换两个连续值,例如[4, 5] => 4 < 5 => [5, 4].

反向比较,如果第一个值大于第二个值,则交换两个连续值。变化

if (in.value() < de.value()) {

if (in.value() > de.value()) {

我认为您的代码非常正确。我尝试了大致等效的测试:

List<Integer> list = Arrays.asList(6, 3, 1, 9, 0);
boolean moved;
do {
    moved = false;
    for (int i = 1; i < list.size(); i++) {
        if (list.get(i - 1) > list.get(i)) {
            Collections.swap(list, i - 1, i);
            moved = true;
        }
    }
 } while (moved);
 System.out.println(list);

这完全符合预期。我怀疑您的问题出在 Result class 或比较测试中。你能post一些显示错误的输出吗?