冒泡排序和交换方法不起作用[Java]

时间:2015-02-28 01:27:18

标签: java methods swap bubble-sort

总的来说,每当我调用此方法对数组进行排序时,它就会停止,就好像它在等待响应一样。知道为什么它不能正常工作吗?

public void bubbleSort(){
    boolean finished = false;
    boolean swapOccurred = false;
    int i = 0;
    int next = i + 1;

    while (finished == false)
    {

        for (; i < theArray.length - 1; i++)
        {
            if (theArray[i] > theArray[next])
            {
                swapValues(theArray[i], theArray[next]);
                swapOccurred = true;
            }
        }
        if (swapOccurred == false)
        {
            finished = true;
        }
    }
}

private void swapValues(int i, int next) {

    int temp;

    temp = i;
    i = next;
    next = temp;

}

2 个答案:

答案 0 :(得分:2)

如果是java,那么

  1. 下一个索引永远不会更新,所以它始终保持为1。
  2. 交换方法没有副作用,你想交换theArray中的元素,但是在java方法中,参数作为值传递,所以下一个和i变量只在swap方法中改变了值,它们有与阵列阵列的细胞无关。

答案 1 :(得分:1)

问题在于你的交换。

在C中,参数按值传递,因此当您执行交换时,传入的值不会受到影响,因此不会发生任何事情。您需要将指针传递给数字(然后在内部取消引用它们):

private void swapValues(int *i, int *next) {
    int temp;

    temp = *i;
    *i = *next;
    *next = temp;
}

然后用变量的地址调用它来交换:

swapValues(&theArray[i], &theArray[next]);

编辑:哈 - @Zielu看到了Java,我看到了C.两种情况都有同样的问题,正如@Zielu指出的那样,你还需要增加下一步。我相信你实际上只是想用[i + 1]作为你的索引代替下一个。