Поиск минимальных элементов в двумерном массиве - C#
Формулировка задачи:
Задача:
Составить команду из четырех лучших бегунов для участия в эстафете 4×100.
Нужно выбрать из двумерного массива 4 минимальных элемента.Я знаю один довольно простой метод через сравнения, но он здесь не эффективен так как у спортсменов могут быть одинаковые результаты, а получиться так что берут только одного, а остальные отбрасываются.
Неэффективный метод ниже.
Посоветуйте еще какие либо более эффективные методы. Только не LINQ так как там используются лямбда выражения, которые мы не проходили и я не имею понятия как это работает
int min = int.MinValue;
int min2 = int.MinValue;
int min3 = int.MinValue;
int min4 = int.MinValue;
int[,] Table = new int[N,N];
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
Table[i,j] = (int)dataGridView1[i, j].Value;
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
{
if(Table[i,j]>min)
min = Table[i, j];
if (Table[i, j]>min2 && min > Table[i, j])
min2 = Table[i, j];
if (Table[i, j] > min3 && min2 > Table[i, j])
min3 = Table[i, j];
if (Table[i, j] > min4 && min3 > Table[i, j])
min4 = Table[i, j];
}
textBox1.Text += "Спортсмен 1-" + min + "\r\n";
textBox1.Text += "Спортсмен 2-" + min2 + "\r\n";
textBox1.Text += "Спортсмен 3-" + min3 + "\r\n";
textBox1.Text += "Спортсмен 4-" + min4 + "\r\n";
}
}Решение задачи: «Поиск минимальных элементов в двумерном массиве»
textual
Листинг программы
//для бегунов будет минимум, а вот для пауэрлифтеров, наоборот должен быть максимум
min1=min2=min3=min4=Int32.Max;
//индекс чтоб отличить двух одинаковых
int id1, id2, id3, id4; id1=id2=id3=id4=-1;
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
{
if(Table[i,j]<min1)
{
min1 = Table[i, j];id1=i*N+j;
}
//если это не тот спортсмен что и первый, но с тем же результатом
if(min1==Table[i, j] && (i*N+j)!=id1)
{
min2=Table[i, j]; id2=i*N+j;
}
//если не с тем же результатом, что первый, но лучшим, чем у прошлого второго
else if (Table[i, j]<min2)
{
min2 = Table[i, j]; id2=i*N+j;
}
if(min2==Table[i, j] && (i*N+j)!=id2)
{
min3=Table[i, j]; id3=i*N+j;
}
else if (Table[i, j]<min3)
{
min3 = Table[i, j]; id3=i*N+j;
}
if(min3==Table[i, j] && (i*N+j)!=id3)
{
min4=Table[i, j]; id4=i*N+j;
}
else if (Table[i, j]<min4)
{
min4 = Table[i, j]; id4=i*N+j;
}
}