2014-01-12 66 views
1

我試圖執行一些排序算法,我必須計算他們花了多少時間。這是我寫的函數:無效函數bubble_sort不排序數組

void bubble_sort(int A[], int len) { 
bool ord = false; 
    for (int i=0; i<len-1 && ord==false; i++) { 
     ord = true; 
     for (int j=len-1; j>i; j--) { 
      if (A[j]-1>A[j]) { 
       ord = false; 
       swap(A[j]-1, A[j]); 
      } 
     } 
    } 
} 

當然這裏有一個典型的swap()功能:

void swap(int x, int y) { 
    int d; 
    d = x; 
    x = y; 
    y = d; 
} 
我沒有與插入排序,選擇排序和合並排序的煩惱

。順便說一句bubble_sort沒有排序我的數組中的數字。

我找不到有什麼問題。你有什麼想法?

+0

更改爲'void swap(int a [],int x,int y);' – BLUEPIXY

+0

爲了替換實體。 – BLUEPIXY

+1

有幾種可能的修復方法,但正如其他人所說,你的交換是錯誤的。 – RichardPlunkett

回答

1

你必須包括-1排列A。不在[]之外。如果A[j]減1的值大於A[j]的值,那麼您的代碼不僅僅是chech。這顯然總是false

另外在交換功能,你不通過陣列A的pterter。其實swap()什麼都不做。

嘗試

if (A[j-1]>A[j]) { 
       ord = false; 
       int temp=A[j-1]; 
      A[j-1]=A[j]; 
      A[j]=temp; 
+0

謝謝+1,我做到了,但數組仍然沒有排序... –

+0

@AlbertoRossi查看編輯 – laaposto

+0

您的代碼正常工作,即將接受它。我也刪除了交換函數 –

3

在C中,函數參數值傳遞,而不是通過引用。 您swap()函數什麼都不做(它甚至不回......沒有你的編譯器抱怨?)

要真正排序,你必須改變swap()

void swap(int *x, int *y) { 
    int d = *x; 
    *x = *y; 
    *y = d; 
    return; 
} 

調用它
swap(&A[j-1], &A[j]); 
+0

我使用wxDevC++並且它沒有抱怨。 –

+0

@EOF您的功能錯誤。閱讀你自己的答案的第一句話來解決它。你也不必返回一個void函數。 – this