我使用两种不同的方法对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应该打印出从小到大的结果。
答案 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
课程或比较测试中。你能发布一些显示错误的输出吗?