有泡泡排序Java的麻烦

时间:2017-10-01 13:33:48

标签: java sorting bubble-sort

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

代码:

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;
                }
            } 
        }   
    }
}

控制台:

输入arr: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]);
        }
    }
}

输入arr:7 7 4 1 2 9 6 4 9 6

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

它有效,但有时候:

输入arr:5 2 2 3 9 6 7 7 0 6

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

3 个答案:

答案 0 :(得分:0)

更改

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

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

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

答案 1 :(得分:0)

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的值

答案 2 :(得分:0)

试试这个:

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循环的工作。