Java的冒泡排序算法(Java Bubblesort Algorithm)

2019-10-30 06:11发布

我想利用暑假练习更多的Java获得通过学习如何编写算法更好。 在这里我元素添加到我的ArrayList但不知何故,第一个数字我也加入其中设置我想避免在我的列表中的位置的号码,我有这个问题。 我只想要第0指数包含我似乎不捉对如何解决这一线索数5。

public class Algorithms {

private ArrayList<Integer> numbers;

public Algorithms() {

    numbers = new ArrayList<Integer>();
    numbers.add(5);
    numbers.add(4);
    bubblesort();
}

public static void main(String args[]) {
    new Algorithms();
}

public void bubblesort() {

    System.out.println(numbers);
    for (int a = 0; a < numbers.size();) {
        for (int b = 1; b < numbers.size();) {
            int currentNumber = numbers.get(a);
            if (currentNumber > numbers.get(b)) {

                //Collections.swap(numbers, currentNumber, numbers.get(b));

                numbers.set(numbers.get(a), numbers.get(b));
                numbers.set(numbers.get(b), numbers.get(a));

                a++;
                b++;

            } else if (currentNumber < numbers.get(b)) {
                a++;
                b++;
            }
            System.out.println(numbers);
        }
    }
}
}

Answer 1:

你是不是正确的交换元素。 代替

numbers.set(numbers.get(a), numbers.get(b));
numbers.set(numbers.get(b), numbers.get(a));

它应该是

int temp = numbers.get(a);
numbers.set(a, numbers.get(b));
numbers.set(b, temp);


Answer 2:

下面的两个语句:

numbers.set(numbers.get(a), numbers.get(b));
numbers.set(numbers.get(b), numbers.get(a));

不进行交换。 第一个参数的List#set(int, E)方法是在列表中,您要设置为第二个参数传递的值的指数。 你需要使用一个temp变量交换。

此外,交换并没有为同样的原因,你的注释行工作。 Collections#swap方法采取指数交换。 因此,只要改变:

Collections.swap(numbers, currentNumber, numbers.get(b));

至:

Collections.swap(numbers, a, b);

并请对所有神圣的爱, 不要从构造函数调用里面的方法 。 从构造函数中删除的方法调用,并将其移动到这样的主要方法:

Algorithms algo = new Algorithms();
algo.bubbleSort()


文章来源: Java Bubblesort Algorithm