【问题标题】:bubbleSort and swap method not working [Java]气泡排序和交换方法不起作用 [Java]
【发布时间】:2015-04-30 20:53:40
【问题描述】:

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

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;

}

【问题讨论】:

  • 好吧,我们没有看到你的主要内容。
  • 对不起!我将添加多少主要内容?我只创建一个新对象并调用 bubbleSort();方法。
  • 还可以考虑为它所在的语言添加一个标签。我们可以猜测,但我们为什么需要呢?
  • 再次抱歉!我对此很陌生,没有意识到。已更新,谢谢!

标签: java methods swap bubble-sort


【解决方案1】:

如果是java,那么

  1. 下一个索引永远不会更新,因此它始终保持为 1。
  2. swap 方法没有副作用,你想交换 theArray 中的元素,但在 java 方法中,参数作为值传递,因此 next 和 i 变量仅在 swap 方法内部更改值,它们没有什么可做的处理 theArray 数组的单元格。

【讨论】:

  • 我很困惑,对不起。我是否需要返回一个值来识别更改。如何交换数组的元素?谢谢
  • 在循环内通过简单: int tmp = theArray[i]; theArray[i]=theArray[下一个]; theArray[next] = tmp 如果要调用该方法,则必须取 3 个 argu、数组和两个索引 swap(int[] arr, int i, int j) {in tmp = arr[i], arr[i]= arr[j]; arr[j]=tmp;}
【解决方案2】:

问题在于您的交换。

在 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] 作为索引来代替下一个。

【讨论】:

  • 我实际上在下一个变量之前有 i + 1,但我正在尝试看看它是否有效,但用下一个变量代替。没有运气
  • Next 永远不会改变,因此您可以摆脱它。你需要的是 i+1: swapValues(theArray[i],theArray[i+1]) - 但你仍然有交换什么都不做的问题。在这种情况下,最简单的解决方案是将交换代码放在 for 循环中。或者,您可以将要交换的数字放入对象中并将其传递给交换,因为对象是通过引用传递的。请参阅this question 的最佳答案,因为我认为它会帮助您解决困惑
猜你喜欢
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-30
相关资源
最近更新 更多