私は、トーナメント ブラケットを通して最小の数を見つけなければならないプログラムを書いています。たとえば、配列があります
int[] a = new int[4] {4, 2, 1, 3}
隣同士の数字を比較して、最小のものを選択する必要があります。( min(4, 2) -> 2
、min(1, 3) -> 1
、そして 1 と 2 を比較しています。1 が最小なので勝者ですが、2 と 1 を比較することはできません。a[0] と1、a[2] と a[3]だけです。一般的に a[2*i] with a[(2*i)+1] for(int i=0; i<a.Length/2; i++)
<- このようなもの
最初の質問: n 個の数がある場合、ツリー全体は 2n-1 個の括弧で構成されます。4 つまたは 7 つの要素の配列を作成する必要がありますか? 4 がより良いオプションのようです。
2 番目の質問: 4 と 2 を比較していて、2 の方が小さい場合、a[0] = 2 にし、1 と 3 を比較しているときに1 = 1 にする必要がありますか? 最後に a[0] を1と比較し、最小の数値を a[0] に入れますか? 一時的な int が必要になる場合があります。
最後の質問: 最も簡単な方法で何を提案しますか? このアルゴリズムに関する情報はほとんど見つかりませんでした。作業アルゴリズムに私の心を向けていただければ幸いです。
それほど多くはありませんが、コードを投稿しています:
int[] a = new int[4] { 4, 2, 1, 3 };
int tmp = 0;
for (int i = 0; i < (a.Length)/2; i++)
{
if (a[tmp] > a[tmp + 1])
{
a[i] = a[i + 1];
}
else if(a[tmp] < a[tmp +1])
{
a[i] = a[i + 1];
}
tmp = tmp + 2;
}
私がうまくやっている点と、何を改善すべきかを指摘できますか?