2014-09-21 90 views
0

我爲整數創建了一個數組冒泡排序函數,它與正整數完美協作,但是當使用負整數時會崩潰。初始顯示功能可以工作,但只會凍結。我試過一個signed int數組無效。C++ Bubble Sort Negative Numbers

我已經看了所有,但無法找到任何其他人與這個確切的問題。

int defaultArray[6] = { 12, -5, 21, -1, 15, 17 }; 
    int numElements = 6; 

    int lastSwap; 
    int searchEnd = numElements - 1; 
    bool sorted = false; 

    while (!sorted) 
    { 
     for (int i = 0; i < searchEnd; ++i) 
     { 
      // If the number in position i is larger than the number in the 
      // position i + 1 then swap them 

      if (defaultArray[i] > defaultArray[i + 1]) { 
       int temp = defaultArray[i]; 
       defaultArray[i] = defaultArray[i + 1]; 
       defaultArray[i + 1] = temp; 
       lastSwap = i + 1; 
      } 
     } 

     // If the lastSwap is at position one we can conclude that the array is 
     // sorted so if lastSwap isn't 1 move searchEnd and continue 
     if (lastSwap != 1) 
     { 
      // Conclude that from lastSwap to the end of the array is sorted 
      // searchEnd begins one position to the left of lastSwap 
      searchEnd = lastSwap - 1; 
     } 
     else { 
      sorted = true; 
     } 
+1

你有點忘了描述問題。你只是說它「停止工作」。但是,這是什麼意思?它會崩潰嗎?它會永久循環嗎?它會產生不正確的結果嗎? – 2014-09-21 00:33:24

+0

這裏沒有你所有的代碼。你最初在哪裏設置'lastSwap',你在哪裏設置你的(外部)循環? – 2014-09-21 00:44:03

+0

有一件事,如果你的數組開始排序,lastSwap仍然未定義,searchEnd也是如此。 – dhavenith 2014-09-21 00:44:45

回答

1

您正試圖優化您的算法降低searchEnd,我認爲存在問題。我建議你保持searchEnd一樣。要確定數組是否已排序,請將sorted設置爲true,並將while循環的開始處設置爲false,如果發生交換,則將其更改爲false。例如:

while (!sorted) { 
    sorted = true; 
    for (int i = 0; i < searchEnd; ++i) { 
     if (defaultArray[i] > defaultArray[i + 1]) { 
      // swap 
      sorted = false; 
     } 
    } 
} 
+0

即使我留在優化工作。我仍然不明白爲什麼它崩潰,但謝謝。 – 2014-09-21 00:47:41