3

我想弄清楚,我只是需要指出正确的方向。请不要只写解决方案,我想了解我需要做什么才能使其工作。

    static void bubbleSort() {
        int [] a = {1,3,4,2,5};
        int [] b = new int[a.length];
        int j = 0;

        for(int c = 0;c <= a.length;c++){//this loop doesnt even do anything??? 
            for(int i = 0;i<a.length-j;i++){

                if(a[i]>a[i+1]){
                    b[i] = a[i+1];
                    b[i+1] = a[i];
                    j++;
                }
                else{
                    b[i] = a[i];
                    b[i+1] = a[i+1];
                    j++;
                }
            }
        }

        for(int i = 0; i< b.length ; i++)
            System.out.println(b[i]);
    }
4

2 回答 2

1

您的代码有很多问题-

1)您不需要额外的数组'b',可以就地完成冒泡排序。

2)考虑使用'j',将其替换为'c'并检查这对循环有何影响。

3)你的新排序数组出现在'b'中,并且在每一步你都在检查条件 -

if(a[i]>a[i+1])

你不觉得'b'在这里可以发挥作用吗?

如果您仍有问题,请考虑以上几点并评论此帖子。

于 2012-06-25T09:52:12.593 回答
-1

不确定,但我认为这应该是正确的实现

static void bubbleSort() {
    int [] a = {1,3,4,2,5};
    for(int c = 0;c < a.length;c++){//now it does 
        for(int i = 0;i+1<a.length-c;i++){

            if(a[i]>a[i+1]){
                int tmp = a[i];
                a[i] = a[i+1];
                a[i+1] = tmp;
            }
        }
    }

    for(int i = 0; i< a.length ; i++)
        System.out.println(a[i]);
}

你一次又一次地跑过a,但你改变了b,你没有比较。所以你的第一个 for 循环什么也没做。你不需要 j,c 可以工作。因为如果你在内循环中做了1个循环,最大的数字在最后,所以你不必再次检查它。c循环应该运行到c

于 2012-06-24T22:42:04.130 回答