【问题标题】:Collections.sort & Bubble sortCollections.sort 和冒泡排序
【发布时间】:2016-01-05 22:24:03
【问题描述】:

我正在使用两种不同的方式对 ArrayList 中的结果进行排序。第一种方法是 Collections.sort,它工作得很好,所以没有问题。另一个是排序算法Bubblesort(我知道它无效,用于学习目的)我有集合排序来对结果进行排序,最大值为0,第二大为1等。我想要我的冒泡排序算法,所以反过来排序, smallet 值为 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);
    }
}

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

【问题讨论】:

  • if (resultComparison= false) { 不会像您认为的那样做。试试if (!resultComparison)
  • @LouisWasserman 改为您的。仍然不起作用,但仍然有帮助!

标签: java sorting collections bubble-sort


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    您的代码在我看来非常正确。我尝试了一个大致相同的测试:

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

    【讨论】:

      猜你喜欢
      • 2017-03-11
      • 1970-01-01
      • 2015-02-14
      • 2013-10-09
      • 2015-09-12
      • 1970-01-01
      • 2014-03-26
      相关资源
      最近更新 更多