Java bubblesort 1-100

时间:2016-11-07 03:03:27

标签: java bubble-sort

所以我完成了大部分代码。我只是无法弄清楚为什么排序列表不是从最小到最大的顺序。赋值是从1-10生成10个随机整数。显示未排序的列表。显示已排序(从最小到最大)。显示数组内容。

        int [] number = new int [10];

        System.out.print("Random Numbers:");
        for (int d = 0 ; d<number.length ; d++){
            int RandomG = g.nextInt(100) + 1;
            System.out.print("\t" + RandomG);
            number[d] = RandomG ;
        }
        System.out.print("\nSorted Numbers:"+Arrays.toString(BubbleSortAsceMethod(number)));
    }

    public static int [] BubbleSortAsceMethod(int[] x) {
        int temp;

        for (int i = 0; i < x.length; i++) {
            for (int j = 1; j < x.length -i; j++) {
                if (x[j - 1] < x[j]) {
                    temp = x[j - 1];
                    x[j - 1] = x[j];
                    x[j] = temp;
                }
            }
        }
        return x;   
    }
}

2 个答案:

答案 0 :(得分:0)

您需要更改条件

当前代码

 if (x[j - 1] < x[j])

固定代码

if (x[j - 1] > x[j])

但是,您可以通过添加isSorted标志来增强代码。

public static int[] BubbleSortAsceMethod(int[] x) {
    for (int i = 1; i < x.length; i++) {
        boolean isSorted = true;

        for (int j = 0; j < x.length - i; j++) {
            if (x[j] > x[j + 1]) {
                int temp = x[j];
                x[j] = x[j + 1];
                x[j + 1] = temp;
                isSorted = false;
            }
        }
        if (isSorted) {
            break;
        }
    }
    return x;
}

答案 1 :(得分:0)

  

我无法弄清楚为什么排序列表不是从最小到最大的顺序。

您的问题发生在x[j - 1] < x[j]。如果temp变量在当前遍历值(temp = x[j - 1])之前从一步中分配了较小的值,那么条件是错误的,然后它与当前遍历值上的较大值交换,这意味着当前遍历之前的值将始终具有比其当前遍历值更大的值。这就是为什么数字从最大到最低排序的原因。

要更正它,只需将条件从x[j - 1] < x[j]更改为x[j - 1] > x[j],其中temp值将在当前遍历值之前的一步中分配最大值,并且用当前遍历值的最低值交换其位置。因此,当前遍历之前的值总是低于其当前遍历值。

public static void main(String[] args) {
    int[] number = new int[10];
    Random g = new Random();

    System.out.print("Random Numbers:");
    for (int d = 0; d < number.length; d++) {
        int RandomG = g.nextInt(100) + 1;
        System.out.print("\t" + RandomG);
        number[d] = RandomG;
    }

    System.out.print("\nSorted Numbers:" + Arrays.toString(BubbleSortAsceMethod(number)));
}

public static int[] BubbleSortAsceMethod(int[] x) {
    int temp;

    for (int i = 0; i < x.length; i++) {
        for (int j = 1; j < x.length - i; j++) {
            if (x[j - 1] > x[j]) {
                temp = x[j - 1];
                x[j - 1] = x[j];
                x[j] = temp;
            }
        }
    }

    return x;
}

注意:您的代码不完整,所以我需要完成它(为您),也许它可能与您的实际代码不一样。请在下一次提问时让其他人了解它。