В вашем коде есть 4 основные проблемы:
1 - используйте midpoint2
, lowBound2
и upBound2
по непонятной причине, вместо них следует использовать 0
и 1
.
2 - Поскольку вы зависите от бинарного поиска, ключевые элементы должны быть отсортированы, поэтому «Ана» должна быть после «Аммара», хотя она моложе, но вы ищете с именем, а не с возрастом, или измените его на другое имя, например"Aca".
3- result
следует сравнивать с 0
, < 0
и > 0
, это не имеет ничего общего с midpoint
.
4- Выследует использовать Console.WriteLine
и break
в первом условии, чтобы позволить while
продолжить, если имя еще не найдено.
string[,] persons = new string[4, 2];
persons[0, 0] = "Aca";
persons[0, 1] = "19";
persons[1, 0] = "Ammara";
persons[1, 1] = "20";
persons[2, 0] = "Marilyn";
persons[2, 1] = "40";
persons[3, 0] = "Zach";
persons[3, 1] = "70";
string x = "Aca";
int upBound = persons.GetLength(0) - 1;
int lowBound = 0;
while (lowBound <= upBound)
{
int midpoint = lowBound + (upBound - lowBound) / 2;
int result = x.CompareTo(persons[midpoint, 0]);
if (result == 0)
{
Console.WriteLine("The value is present at:" + persons[midpoint, 1]);
break;
}
else if (result > 0)
{
lowBound = midpoint + 1;
}
else
{
upBound = midpoint - 1;
}
}