Collections.sort&冒泡排序

时间:2016-01-05 22:24:04

标签: java sorting collections bubble-sort

我使用两种不同的方法对ArrayList中的结果进行排序。第一种方式是Collections.sort工作得很好,所以没有问题。另一个是排序算法Bubblesort(我知道它无效,用于研究目的)我有收集排序结果的最大值为0和第二大1等。我想我的泡泡排序算法所以反过来排序,smalllet值为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是我的类的每个实例都有的属性,false应该打印出从小到大的结果。

2 个答案:

答案 0 :(得分:1)

目前,您的冒泡排序按降序排序,列表中0索引的值最大。这是因为如果第一个值小于第二个值,则交换两个连续值,例如[4,5] =&gt; 4&lt; 5 =&gt; [5,4]。

反转比较,以便在第一个值大于第二个值时交换两个连续值。变化

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

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

答案 1 :(得分:0)

您的代码对我来说非常正确。我尝试了大致相同的测试:

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课程或比较测试中。你能发布一些显示错误的输出吗?