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++)