所以我试图使用冒泡排序来命令我的列表,但它在排序后给出的输出出现了可怕的错误。代码中似乎存在某种问题,但我不太确定......可能只是我自己变得愚蠢。
public static void main(String[] args) {
List list = new ArrayList();
list.add(1);
list.add(6);
list.add(3);
list.add(4);
list.add(45);
list.add(6);
list.add(234);
list.add(8);
list.add(9);
bubbleSort(list);
System.out.println(list);
}
public static void bubbleSort(List<Integer> list) {
int n = list.size();
int temp = 0;
for (int i = 0; i < n-i; i++) {
for (int j = 0; j < (n - i - 1); j++) {
if (list.get(j) > list.get(j+1)) {
temp = list.get(j);
list.set(j,list.get(j+1));
list.set(list.get(j+1), temp);
}
}
}
}
它提供的输出是[1, 3, 3, 6, 6, 6, 8, 8, 45]
答案 0 :(得分:1)
问题在于你的交换
list.set(list.get(j+1), temp);
应该是
list.set(j+1, temp);
使用list.get(j+1)
设置的索引与您想要的索引不同
另请注意,您的列表不会完全排序
for(int i = 0; i < n-i; i++)
那只能处理大约一半的逆序数组(5,4,3,2,1 - > 2,1,3,4,5)
相反,你应该减去1而不是i
for(int i = 0; i < n-1; i++)