2011-10-20 74 views
0

我正在嘗試一個基本的排序練習,我希望我可以接受一些可能的基本邏輯錯誤的幫助。冒泡排序邏輯錯誤

int[] numbers = new int[] { 2, 5, 11, 38, 24, 6, 9, 0, 83, 7 }; 
     for (int loop = 0; loop < numbers.Length; loop++) 
     { 
      Console.WriteLine(numbers[loop]); 
     } 
     Console.WriteLine("Performing a bubble sort"); 

     bool flag = false; 
     do 
     { 

      for (int loop = 0; loop < numbers.Length - 1; loop++) 
      { 
       if (numbers[loop] > numbers[loop + 1]) 
       { 

        int temporary = numbers[loop]; 
        numbers[loop] = numbers[loop + 1]; 
        numbers[loop + 1] = temporary; 
        flag = true; 
       } 

      } 
     } while (flag == false); 

     for (int loop = 0; loop < numbers.Length; loop++) 
     { 
      Console.WriteLine(numbers[loop]); 
     } 
+3

請描述什麼是錯的,你試圖解決它。 – Jimmy

回答

1

您的代碼有兩個問題。第一,正如已經指出的那樣,你需要循環長達​​。如果你給它一個更具表現力的名字,那將會更加清晰。 madeASwap或類似的東西很明顯:do while(madeASwap)

另一個問題是,您需要在運行內部循環之前重置標記。沒有這一點,只需檢查false在一次迭代後就結束了,並且檢查true會導致無限循環。

簡而言之:重置您的標誌,並循環,而它是真的。

+0

謝謝allot ...我現在明白了。 – Arianule

0

看看這裏和遷移:

// array of integers to hold values 
private int[] a = new int[100]; 

// number of elements in array 
private int x; 

// Bubble Sort Algorithm 
public void sortArray() 
{ 
    int i; 
    int j; 
    int temp; 

    for(i = (x - 1); i >= 0; i--) 
    { 
    for(j = 1; j <= i; j++) 
    { 
     if(a[j-1] > a[j]) 
     { 
     temp = a[j-1]; 
     a[j-1] = a[j]; 
     a[j] = temp; 
     } 
    } 
    } 
} 
1

你的標誌的邏輯是錯誤的。其他一切看起來都正確

的標誌應該是指:

loop until we looped without making any swaps

但是,這是不是你的代碼目前一樣。

2

我不知道所有的錯誤,但有一點可以肯定的是,你的do/while循環應該是while(flag == true)而不是while(flag == false)。其中,當然,可以更簡單地寫爲while(flag)

0

你的循環條件while(flag == false)應該讀while(flag == true)

0

冒泡排序是不是一個合格的排序。在一次迭代中,最大的數字移動到最右邊的單元格。所以在第一次迭代之後,最大的數字將被存儲在最後一個單元格中。

for (int l = numbers.Length - 1; l > -1; l--) 
    for (int loop = 0; loop < l; loop++) { /* your code */ } 

而且你不需要flag(好吧,也許你需要的,但不是你犯的錯誤)

這裏的算法的每次迭代後的輸出:

2 5 11 24 6 9 0 38 7 83 
2 5 11 6 9 0 24 7 38 83 
2 5 6 9 0 11 7 24 38 83 
2 5 6 0 9 7 11 24 38 83 
2 5 0 6 7 9 11 24 38 83 
2 0 5 6 7 9 11 24 38 83 
0 2 5 6 7 9 11 24 38 83 
0 2 5 6 7 9 11 24 38 83 
0 2 5 6 7 9 11 24 38 83 
0 2 5 6 7 9 11 24 38 83