【问题标题】:Java Bubble Sort Iterates Only TwiceJava 冒泡排序只迭代两次
【发布时间】:2014-10-29 22:39:16
【问题描述】:

我正在学习 Java 入门课程,只是想通过一些练习来领先一步,所以我正在制作一个冒泡排序程序。出于某种原因,它只会通过外循环两次。

public ArrayList SortArray(ArrayList<Integer> u) {
    int temp;
    int spot;
    for (int isOrdered = 1; isOrdered == 1;) {
        for (spot = 0; spot < u.size() - 1; spot ++) {
            System.out.println(u.get(spot) + " " + u.get(spot + 1) + " " + spot);
            if (u.get(spot) > u.get(spot + 1)) {
                temp = u.get(spot + 1);
                u.set(spot + 1, u.get(spot));
                u.set(spot, temp);
                isOrdered = 1;
            }
            else {
                isOrdered = 0;
            }
        }
    }
    return u;
}

据我所知,发生的事情是在第二次迭代之后,它不会将“spot”重置为 0,因此它不会再次运行循环。有什么想法吗?

【问题讨论】:

  • 一旦内部循环退出,isOrdered 设置为 0,外部循环就会退出。只要数组的最后两个元素已经有序,就会发生这种情况。你需要用你的逻辑回到绘图板上。
  • 您应该尝试使用调试器并单步执行您的代码
  • 你可以在你的数组列表中发布你的示例输入

标签: java sorting loops iteration bubble-sort


【解决方案1】:

嗯,对于初学者来说,这是一种使用 for 循环来实现 while 循环的不寻常方式。尝试对isOrdered 使用布尔值,对这样的语句使用while(!isOrdered)

正如 Ted Hopp 的评论所说,您的逻辑不太正确。您的代码所做的是它将对列表中的一个值进行排序,一旦该值“冒泡”,您的标志就会设置为 true。

你需要你的外循环的条件是它一直运行直到所有的单元都井井有条。

现在,当您浏览列表时,您的标志只是表示它已排序,但是当它浏览列表时它需要做的是正确的而不执行交换。 p>

尝试在不看的情况下实现它,然后如果你不能得到它(我假设你有兴趣自己做,因为你在你的课堂上努力工作)看看示例here .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 2023-03-07
    • 2014-06-25
    • 2017-06-17
    • 2020-09-23
    • 2013-09-04
    相关资源
    最近更新 更多