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一些显示错误的输出吗?
我使用两种不同的方式对 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一些显示错误的输出吗?