【问题标题】:Bubble sort swaps every number regardless of value冒泡排序交换每个数字,而不考虑值
【发布时间】:2014-03-06 19:17:53
【问题描述】:
import java.util.*;
public class Zhangbubble
{
    public static void main (String[] args)
    {
        int Bub[] = new int[6];
        Random randy = new Random();
        boolean Done = false;
        for (int x=0; x<6; x++)
        {
            Bub[x] = randy.nextInt(100);
            System.out.println (Bub[x]);
        }
        System.out.println ("This is the original array");
        while (! Done)
        {
            Done = true;
            for(int x = 0; x < Bub.length - 1; x++) 
            {
                if(Bub[x+1] < Bub[x]) 
                {
                    int temp = Bub[x];
                    Bub[x] = Bub[x+1];
                    Bub[x+1] = temp;
                    System.out.println ("Number "+Bub[x]+ " and  " +Bub[x+1]+ " have     been switched");
                }
            }
            for(int x = 0; x < Bub.length; x++) 
            {
                System.out.println(Bub[x]);

            }
            Done = true;
        } 

    }
}

我的冒泡排序按升序工作,但只排序一次。它似乎工作正常,但我无法确定是什么使它不循环。它将遍历数字序列一次,但在第一次初始检查后不会继续排序。有人可以帮我让它循环直到整个序列都井井有条吗?好吧,我想我可能已经想通了。我摆脱了 Done = true ,而是在排序算法之后添加了 Done = false 。它现在似乎工作得很好,但如果有人发现有问题,请不要犹豫指出!

【问题讨论】:

  • 由于 if 条件,它不会交换所有内容:Bub[x + 1] &gt; Bub[x]。它将较大的元素排序到数组的开头。此外,它不是一个完整的排序,因为它只对数组进行一次循环。
  • 那个while 循环没有完成任何事情。
  • 请遵循 java 命名约定。 Done 应该是 doneBub 应该是 bub
  • 好的,我已经把它按升序排列,但我怎样才能让它运行不止一次呢?现在一切正常。

标签: java sorting swap bubble-sort


【解决方案1】:

它不会交换“一切”。但是,如果您尝试按升序对数组进行排序,则 if 条件是错误的。

此外,您需要仔细考虑何时应将Done 设置为true。目前的方法是有缺陷的。

【讨论】:

  • 我已将数字按升序排列。我在交换算法下将 done 设置为 false 并摆脱了 done = true。
  • 如何使冒泡排序循环不止一次?
【解决方案2】:

据我所知,交换工作正常。您的问题是,while 循环的内部部分永远不会重复一次以上,因为您在最后将Done 设置为true。这样,只有正确确定数组中最小元素的位置。

如果您希望它执行完整的冒泡排序,我建议将外部 while 循环换成 for 循环,就像这样

for (int y = 0; y < Bub.length - 1; y++) {
    for (int x = 0; x < Bub.length - 1; x++) {
        // do stuff
    }
}

或者如果你想保持while循环,你应该正确设置结束条件,如

if ( *everything is sorted* ) {
    Done = true;
}

【讨论】:

    猜你喜欢
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 2012-07-14
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    相关资源
    最近更新 更多