Я пишу программу, которая должна найти наименьшее число в турнирной сетке. Например, есть массив
int[] a = new int[4] {4, 2, 1, 3}
и, сравнивая числа, стоящие рядом друг с другом, я должен выбрать наименьшее. (min(4, 2) -> 2
, min(1, 3) -> 1
, а затем я сравниваю 1 и 2, 1 наименьший, поэтому он и выигрывает, но сравнивать 2 и 1 невозможно. Просто [0] с 1, a[2] с a[3] и так далее. Обычно a[2*i] с [(2 *i)+1] for(int i=0; i<a.Length/2; i++)
‹- примерно так
Первый вопрос: если есть n чисел, все дерево состоит из 2n-1 скобок. Я должен создать массив из 4 или 7 элементов? 4 кажется лучшим вариантом.
Второй вопрос: если я сравниваю 4 и 2, а 2 меньше, я должен сделать [0] = 2, а затем при сравнении 1 и 3 1 = 1? Наконец, сравнивая [0] с 1 и помещая наименьшее число в [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;
}
Можете ли вы указать, что я делаю хорошо, а что следует улучшить?