无论价值如何,冒泡排序都会交换每个数字

时间:2014-02-09 14:54:22

标签: java sorting swap bubble-sort

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。它现在似乎工作得很好,但如果有人发现错误,请不要犹豫,指出来!

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

从我看到的,交换工作正常。您的问题是,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;
}