2016-07-13 15 views
-3

私の昇順関数アルゴリズムに問題があります。この関数は、関数の最大要素に達した後、すべての場所に設定します。たとえば、88,72,81の順序で入力を入力します。 次に、72,81,88の代わりに88,88,88を取得します。配列昇順アルゴリズムC++

コード:

void orderGrades(Student grades[], int studentNumber){ 
int startScan, minIndex, minValue; 

for(startScan = 0; startScan < (studentNumber - 1); startScan++){ 
    minIndex = startScan; 
    minValue = grades[startScan].getGrade(); 
    for(int index = startScan + 1; index < studentNumber; index++) 
    { 
     if(grades[index].getGrade() < minValue) 
      { 
       grades[index].setGrade(minValue); 
       minIndex = index; 
      } 
     } 
     grades[minIndex].setGrade(grades[startScan].getGrade()); 
     grades[startScan].setGrade(minValue); 
    } 
} 

私はロジックを見下ろす午前何かわからないので、私は他の誰かが別の視点を持っているかどうかを確認したかったです。

+0

'if'ブロックの後ろに' else'または 'continue'がありませんか? –

+2

配列をソートするには、[std :: sort](http://en.cppreference.com/w/cpp/algorithm/sort)関数を使用して作業を行い、釣りや星の眺めをすることができます。 –

+1

@ Raw Nしかし、私は自分の知識のアルゴリズムを理解しようとしています。 –

答えて

0

私はあなたのプログラムをデバッガで実行した後、内側のforループ内のif文で次の項目の値を上書きし、永遠に失われている。これは、外側のforループの最初の繰り返しですべての配列要素に対して発生します(これが、すべての要素で88を取得する理由です)。あなたが失敗したテストケースを提供してくれてうれしいです:-)

+0

私は自分自身で解決策を見つけることができました。私は完全に異なるアルゴリズムを作ることに決めました。これらのステートメントは問題だったので、代わりにループのネストで変数をシフトしていました。方法をありがとう、私はあなたの応答をありがとう:) –