2016-07-19 3 views
-3

私の割り当ては、テキストファイルから読み込まれた配列の中で最も高い数値を決定する関数の作成です。私は、ソート、バブルを使用してに見てきたと私は以来、割り当てが、ここでは、そのようなバブルソートを使って最高の数を決定する方法[C++]

としてそれらを格納する必要がなく、ソートされた番号を尋ねていないと思い、私がこれまで

void determineWinner(string namesArr[], float votesArr[], int size) 
{ 
    int temp = 0; 
    string tempname; 

    for (int i = 0; i < size; i++) 
    { 
     if (votesArr[i] > votesArr[i + 1]) 
     { 
      temp = votesArr[i]; 
      tempname = namesArr[i]; 
      votesArr[i] = votesArr[i + 1]; 
      namesArr[i] = namesArr[i + 1]; 
      votesArr[i + 1] = temp; 
      namesArr[i + 1] = tempname; 
     } 
    } 
} 

を持っているものです私はそれを作成して条件をテストし(最小から最大までソートすることを念頭に置いて)、iをi + 1に置き換えます。そして、「投票」が特定の名前にリンクされているので、私は投票が動くにつれて名前を切り替える。

は、例えば、配列は、最初の

5000, 4000, 6000, 2500, 1800 

に配置されるだろうと私はプログラム名が動作を停止しました「と、実行時エラーになっていると思う

1800, 2500, 4000, 5000, 6000 

として終わる必要があるだろう"これを修正するために私は何ができますか?

+0

私は直接の回答はしませんが、ファイルの内容(あまり大きすぎない場合)を 'std :: vector'に格納し、' std :: max_element'を使って最大値を見つけます。 – ArchbishopOfBanterbury

+2

'max = -some_big_number;配列内の各要素{if(element> max)max = element} ' – John3136

+1

デバッガの使い方を調べてください。クラッシュの理由は、配列の終わりを過ぎてアクセスしている可能性が高いためです。 'size-1'までループする必要があります。しかし、コードでは問題は解決しません。挿入ソートは常にバブルソートよりも優れているため、配列をソートする必要はありません。 –

答えて

0

あなたの問題は、配列のサイズが5であることです。要素0,1、...、4が含まれていることを意味します。i=0からi<5に反復します。

これは、4回目の実行では、if (votesArr[4] > votesArr[4+1])を試みることを意味します。これは、4番目の要素が最後(5番目はありません)であるため無効です。

だから、i=1で始まり、if (votesArr[i-1] > votesArr[i])のようにするか、i < size-1に行ってください。

あなたは2つの要素しか持たないと考えてください。 1つの比較しか必要ありません。

0

また、バブルソートアルゴリズムを見てみる必要がありますが、それは私にとっては正しいとは思わない(ソリューションを台無しにしたくない)。

最高の要素だけが必要な場合は、実際の最高のメモリ(一時変数)を保持し、毎回上書きする必要があります。より大きなものを見つける。

関連する問題