2015-10-08 186 views
1

我通過引用寫了一個簡單的排序代碼。在這裏我傳遞一個數組來運行,然後執行排序操作。在傳遞數組之後,我按照用戶輸入的方式輸出整個數組,然後執行排序操作(按降序排列),但排序後,當我打印排序的數組時,我得到的數組索引'0'包含值'41' 。如果我輸入的數字小於'41',那麼已排序的數組顯示爲'41',然後以已排序的方式顯示其他數字。請解釋我爲什麼得到這樣的輸出。cpp通過引用傳遞

#include<iostream> 
using namespace std; 
int sort_array(int *p); 

int main() { 
    int arr[10]; 
    for (int i=0; i<10; i++) { 
     cout << "enter " << (i+1) << " value:"; 
     cin >> arr[i]; 
     cout << "\n"; 
    } 

    sort_array(arr); 
    return 0; 
} 

int sort_array(int *p) { 
    int c=0; 
    for (int i=0; i<10; i++) { 
     cout << p[i]; 
     cout << "\n"; 
    } 
    cout << "arr:"<<p[0]; 
    cout<<"\n"; 

    for (int i=0; i<10; i++) { 
     for (int j=0; j<10; j++) { 
      if (p[j] < p[j+1]) { 
      c=p[j]; 
      p[j]=p[j+1]; 
      p[j+1]=c; 
     } 
    } 

    cout << "\n"; 
    for (int i=0; i<10; i++) { 
     cout << p[i]; 
     cout << "\n"; 
    } 
    cout << p[0]; 
} 
+2

請在代碼中包含初始值,而不是從命令行中讀取它們,以方便可能需要幫助的人員並確保該部分不會導致問題。此外,請將代碼格式保持一致,並在您的問題中包含預期和實際輸出。您可能還需要調整主題或代碼,因爲與「按引用傳遞」關係不大。 –

回答

0

問題在於您的排序。 j從0到9,並且當您訪問p[j+1]j = 9p[10]在您的數組邊界之外。

因此請修復您的以下部分以進行正確排序。

for(int i=0;i<10;i++) 
{ 
    for(int j=0;j<10;j++) 
    { 
     if(p[j]<p[j+1]) 
     { 
      c=p[j]; 
      p[j]=p[j+1]; 
      p[j+1]=c; 
     } 
    } 
} 

說明:上面的代碼是發佈的原始代碼的問題部分。這不是固定的排序。這是要修復的部分。

1

看起來你正在嘗試在你的數組sort_array()上進行冒泡排序,但邏輯錯誤。嘗試使用此代碼來代替:

int sort_array(int *p) { 
    int c=0; 

    for (int i=0; i<10; i++) { 
     cout << p[i]; 
     cout << "\n"; 
    } 
    cout << "arr:" << p[0]; 
    cout << "\n"; 

    for (int i=0; i < 10; i++) { 
     for (int j=1; j < (10-i); j++) { 
      if (p[j-1] > p[j]) { 
       c = p[j-1]; 
       p[j-1] = p[j]; 
       p[j] = c; 
      } 
     } 
    } 

    cout << "\n"; 
    for (int i=0; i<10; i++) { 
     cout << p[i]; 
     cout << "\n"; 
    } 
    cout<<p[0]; 
} 
0
for(int i=0;i<10;i++) 
{ 
    for(int j=0;j<9;j++) 
    { 
     if(p[j]<p[j+1]) 
     { 
      c=p[j]; 
      p[j]=p[j+1]; 
      p[j+1]=c; 
     } 
    } 
} 

排序工作正常,有一次,我改變了內部循環的限制。問題是訪問數組索引[10],但我已經宣佈它直到索引[9]。