2017-04-22 9 views
0

私のコードはint main()関数に入れても機能しますが、別の関数(void bubbleSort)として実装するとソートが完了していないかのように出力されます。バブルソート出力はソートされていません

void bubbleSort(int numeros[]) 
{ 
int store = 0; 
int length = ARRAY_SIZE(numeros); 
for(int i=0; i<(length-1); i++) 
{ 
    for(int j=0; j<(length-i-1); j++) 
    { 
     if(numeros[j] < numeros[j+1]) 
     { 
      store = numeros[j]; 
      numeros[j] = numeros[j+1]; 
      numeros[j+1] = store; 

     } 
    } 
} 
for(int m=0; m<1000; m++) 
{ 
    cout << numeros[m] <<' '; 
} 
} 

どうすれば間違っている可能性がありますか?どんな助けでも大歓迎です。

+3

'int length = ARRAY_SIZE(numeros);' - 'std :: cout << length << std :: endl;'をそれの後ろに置きます。これはあなたに問題を教えてくれるかもしれません –

答えて

2

C++関数の引数として完全な配列を渡すことはできず、配列の最初の要素へのポインタのみを渡すことはできません。その結果、配列の長さを関数に伝える方法が必要です。もう一つの議論としてそれを伝える一つの方法です(下記参照)。いくつかの議論があり、それを行う他の/より良い方法の提案がありますhere

たとえば、間違ってlength引数をこれらの関数に渡すと、配列が存在するメモリブロックの後に存在するすべてのメモリ上で操作が開始されます。

#include <iostream> 

using namespace std; 

void printArray(int array[], int length) { 
    for(int i=0; i<length; i++) { 
     cout << array[i] << " "; 
    } 
    cout << endl; 
} 

void bubbleSort(int numeros[], int length) { 
    int store = 0; 
    for(int i=0; i<(length-1); i++) { 
     for(int j=0; j<(length-i-1); j++) { 
      if(numeros[j] < numeros[j+1]) { 
       store = numeros[j]; 
       numeros[j] = numeros[j+1]; 
       numeros[j+1] = store; 
      } 
     } 
    } 
    cout << "array at end of bubble sort: "; 
    printArray(numeros, length); 
} 

int main() { 
    int anArray[] = {1, 3, 2, 4, 6, 5, 10, 9, 7, 8}; 
    int arraySize = sizeof(anArray)/sizeof(anArray[0]); 
    cout << "arraySize: " << arraySize << endl; 
    cout << "array before sort: "; 
    printArray(anArray, arraySize); 
    bubbleSort(anArray, arraySize); 
    cout << "array after sort: "; 
    printArray(anArray, arraySize); 
    return 0; 
} 
+0

おかげで、これは確かに助けになるでしょう –

+0

@LeeMin心配はありません。それがあなたの質問に答えるなら、それを受け入れられた/ upvotingとしてマークすることを検討してください。 – kabdulla

関連する問題