冒泡排序有问题 Java

Having trouble with bubble sort Java

我正在尝试实现 冒泡排序,但它不起作用!帮我找个问题。

代码:

public class Main {   

  public static int e=0;
    public static int arraylength;
    public static int[] array = new int[10];

    public static void main(String[] args) {
        Random random = new Random();
        for(int i=0;i<array.length;++i){
            array[i]=random.nextInt(10);
            System.out.print(" "+array[i]);
        }   
        arraylength=array.length;
        for (int i =0;i<arraylength;i++) {
            arraylength--;
            for (int j = 0; j < arraylength - 1; j++) {
                if (array[j] > array[j + 1]) {
                    e = array[j + 1];
                    array[j + 1] = array[j];
                    array[j] = e;
                }
            } 
        }   
    }
}

控制台:

输入数组:5 1 5 4 7 8 7 7 2 8

输出:1 4 5 2 5 7 7 7 8 8

public class Main {

    public static int e=0;
    public static int arraylength;
    public static int[] array = new int[10];

    public static void main(String[] args) {
        Random random = new Random();
        for(int i=0;i<array.length;++i){
            array[i]=random.nextInt(10);
            System.out.print(" "+array[i]);
        }

        System.out.println();
        arraylength=array.length;
        for (int i =0;i<arraylength;i++) {
            arraylength--;
            for (int j = 0; j < array.length - 1; j++) {
                if (array[j] > array[j + 1]) {
                    e = array[j + 1];
                    array[j + 1] = array[j];
                    array[j] = e;
                }
            }
        }
        for(int i=0;i<array.length;++i){
            System.out.print(" "+array[i]);
        }
    }
}

输入数组:7 7 4 1 2 9 6 4 9 6

输出:1 2 4 4 6 6 7 7 9 9

有效,但有时:

输入数组:5 2 2 3 9 6 7 7 0 6

输出:2 2 3 0 5 6 6 7 7 9

改变

for (int i =0; i<arraylength; i++) {

for (int i =0; i<array.length; i++) {

外层循环需要对数组中的每个元素执行一次 运行,而您不能使用 arraylength 变量执行此操作,因为您正在减少它的值,即在第一次迭代之后,arraylength 不再等于 array.length.

public static int e=0;
public static int arraylength;
public static int[] array = new int[10];

public static void main(final String[] args) {
    final Random random = new Random();
    for(int i=0;i<array.length;++i){
        array[i]=random.nextInt(10);
        System.out.print(" " + array[i]);
    }
    System.out.println();

    arraylength = array.length;
    for (int i =0;i<arraylength;i++) {

        for (int j = 1; j < arraylength - i; j++) {
            if (array[j - 1] > array[j]) {
                e = array[j - 1];
                array[j - 1] = array[j];
                array[j] = e;
            }
        }
    }
    for (final int element : array) {
        System.out.print(" " + element);
    }
}

你不需要每次在数组上循环时都减少 arraylength 的值

试试这个:

public class Main {

    public static int e=0;
    public static int[] array = new int[10];

    public static void main(String[] args) {
        Random random = new Random();
        for(int i=0;i<array.length;++i){
            array[i]=random.nextInt(10);
            System.out.print(" "+array[i]);
        }

        System.out.println();
        for (int i =0;i<array.length;i++) {
            for (int j = 0; j < array.length - 1; j++) {
                if (array[j] > array[j + 1]) {
                    e = array[j + 1];
                    array[j + 1] = array[j];
                    array[j] = e;
                }
            }
        }
        for(int i=0;i<array.length;++i){
            System.out.print(" "+array[i]);
        }
    }
}

arraylength--;

导致了问题。您不需要更改该值,因为它会影响 for 循环的工作。