Java - 列表的冒泡排序算法
Java - BubbleSort Algorithm for list
所以我正在尝试使用冒泡排序来排序我的列表,但排序后它给出的输出出现了可怕的错误。代码中某处似乎存在某种问题,但我不太确定...可能只是我自己很愚蠢。
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]
问题出在你的交换
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++)
所以我正在尝试使用冒泡排序来排序我的列表,但排序后它给出的输出出现了可怕的错误。代码中某处似乎存在某种问题,但我不太确定...可能只是我自己很愚蠢。
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]
问题出在你的交换
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++)