为什么我的冒泡排序方法不起作用?

时间:2012-06-24 22:20:54

标签: java sorting bubble-sort

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

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

2 个答案:

答案 0 :(得分:1)

您的代码存在许多问题 -

1)你不需要额外的数组'b',冒泡排序可以在现场完成。

2)考虑使用'j',将其替换为'c',并检查它是如何在循环中产生差异的。

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

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

你不觉得,'b'在这里扮演角色吗?

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

答案 1 :(得分:-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]);
}

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