2013-03-04 90 views
0

它不會將我第二次打印出陣列。BubbleSort不能正常工作

它可以工作,如果我刪除對bubbleSort(...)的調用。

無法理解爲什麼......這種行爲從來沒有發生過,爲什麼執行程序會跳轉到第二個printArray(...)?

有什麼建議嗎?

#include <iostream> 
#include <cstdlib> 
using namespace std; 

// STRUCT 
struct Array 
{ 
    int * data; 
    unsigned int size; 
}; 

// PROTYPES 
void printArray(Array &); 
void bubbleSort(Array &); 

// MAIN 
int main(int argc, char **argv) 
{ 
    Array array; 

    array.size = 10; 
    array.data = new int [ array.size ]; 

    for (unsigned int i = 0; i < array.size; ++i) 
     array.data[ i ] = rand() % 10; 

    printArray(array); 
    bubbleSort(array); 
    printArray(array); 


    return 0; 
} 

void printArray(Array & array) 
{ 
    for (unsigned int i = 0; i < array.size; ++i) 
     cout << array.data[ i ] << ' '; 

    cout << endl; 
} 

void swap(int & m, int & n) 
{ 
    int temp = m; 
    m = n; 
    n = temp; 
} 

void bubbleSort(Array & a) 
{ 
    for (unsigned int i = 0; i < a.size - 1; ++i) 
     for (unsigned int j = a.size - 1; j >= i; --j) 
      if (a.data[ j-1 ] > a.data[ j ]) 
       swap(a.data[ j-1 ], a.data[ j ]); 

} 

回答

2

小心無符號的數據類型。在某些時候,「我」將是0,並且您將檢查「j> = 0」,這總是正確的。從而創建一個無限循環。

+0

謝謝。如果(a.data [j-1]> a.data [j]) swap(a。)將內部循環替換爲(unsigned int j = a.size - 1; j> i; - j) 。數據[j-1],數據[j]);現在它正在工作 – doplumi 2013-03-04 19:23:09