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