Java - 用于列表的BubbleSort算法

时间:2017-11-12 05:01:45

标签: java sorting arraylist bubble-sort

所以我试图使用冒泡排序来命令我的列表,但它在排序后给出的输出出现了可怕的错误。代码中似乎存在某种问题,但我不太确定......可能只是我自己变得愚蠢。

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]

1 个答案:

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