2014-02-09 38 views
0
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

由於if條件:'Bub [x + 1]> Bub [x]',它並不交換所有內容。它會將較大的元素排序到數組的開頭。此外,它不是一個完整的排序,因爲它只在數組上循環一次。 – Brigham

+0

'while'循環沒有完成任何事情。 –

+0

請遵循java命名約定。 「完成」應該是「完成」,「Bub」應該是「bub」。 –

回答

0

它不交換「一切」。但是,如果您嘗試按升序對數組進行排序,則if條件是錯誤的。

此外,您需要仔細考慮何時應將Done設置爲true。目前的做法是有缺陷的。

+0

我已將數字按升序排列。我在交換算法下將false設置爲false,並刪除了done = true。 – Sarah

+0

如何多次創建氣泡排序循環? – Sarah

0

從我看到的交換工作正常。你的問題是,while週期的內部部分永遠不會重複多次,因爲你最後設置了Donetrue。這樣,只有數組中最小元素的位置才能正確確定。

如果你想讓它執行完整冒泡排序,我建議爲for循環交換外while週期,這樣

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; 
}