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。它现在看起来很好用,但是如果有人发现了问题,请不要犹豫地指出出来!
发布于 2014-02-09 15:03:13
它不能交换“一切”。但是,如果您试图按升序对数组进行排序,则if条件是错误的。
此外,您需要仔细考虑何时应该将Done设置为true。目前的做法存在缺陷。
发布于 2014-02-09 15:15:26
据我所见,交换还行。您的问题是,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;
}https://stackoverflow.com/questions/21660601
复制相似问题