2015-06-11 34 views
0

你能幫我告訴我這有什麼問題嗎?爲什麼交換功能不起作用?交換數組函數的兩個元素

void swap(int a[], int b, int c) { 
    int temp = a[b]; 
    a[b] = a[c]; 
    a[b] = temp; 
} 

void bubble1 (int a[], int N){ 
    int i; 
    for(i=0;i<N-1;i++){ 
     if(a[i]>a[i+1]){ 
      swap(a,i,i+1); 
     } 
    } 
} 


void main() { 
    int N = 11; 
    int a[12]={5,3,12,4,25,10,14,35,2,8,13}; 

    bubble1 (a,N); 

    int i; 
    for(i = 0; i < N; i++){ 
     printf("%d\n",a[i]); 
    } 
} 

如果我不使用交換功能,並在「泡泡」功能手動進行交換它的作品。但是,如果我使用交換,它不起作用,即使它完全相同。我在這裏做錯了什麼?

+0

嘗試跨過'swap()'在一張紙上,你會很快看到問題。 –

+0

不使用額外的變量作爲大小使用swap(int a [],size_t size),並通過#define ARRAY_LENGTH(a)(sizeof(a)/ sizeof(a [0]))計算您使用的數組的大小。一個是陣列 –

回答

3
int temp = a[b]; 
a[b] = a[c]; 
a[b] = temp; 

簡單的拼寫錯誤,您分配給a[b]兩次。第二個應該是a[c]

+0

大聲笑我感到慚愧..sily – Richard

+0

不要。但是,仔細閱讀它,重新編寫它,並徹底思考以避免出現這樣的錯誤。 – Emz