#c# #arrays #winforms #multidimensional-array #binary-search
#c# #массивы #winforms #многомерный-массив #двоичный поиск
Вопрос:
Мне было дано задание по программированию для создания метода двоичного поиска для 2D-массива, который сортирует строки. Я делаю это в рамках курса, в котором много специфики, я не могу использовать какие-либо готовые методы поиска. Мне был предоставлен стандартный метод двоичного поиска для 1D-массива, содержащего целые числа, что мне не очень помогло.
приведенный ниже код — это мое лучшее усилие, но он возвращает «Игра не найдена!» (даже несмотря на то, что игра существует в массиве).
//Write the code for a Binary Search for the Game Title in the 2D array and display the
//information in the other textboxes when found, add suitable feedback if the search is not
//successful(do not use any built-in array methods)
private void btnSearch_Click(object sender, EventArgs e)
{
int min = 0;
int max = gameCount - 1;
int foundIndex = -1;
bool isFound = false;
String target = txtGameTitle.Text;
sortArray();
if (gameCount == 0)
{
MessageBox.Show("Please enter game data");
}
while (!isFound amp;amp; !((max - min) <= 1))
{
int mid = (max min) / 2;
if (string.Compare(gamesArray[mid, 0], target, true) == 0)
{
foundIndex = mid;
isFound = true;
break;
}
else
{
if (string.Compare(gamesArray[mid, 0], target, true) > 0)
{
max = mid;
}
else
{
min = mid;
}
}
}
if (isFound)
{
lstMyGames.SelectedIndex = foundIndex;
}
else
{
MessageBox.Show("Game not found!");
}
}
Комментарии:
1. Строка находится только в одной строке или может переноситься в следующую строку?
2. если ваш 2d-массив отсортирован по строке или столбцу, вы можете использовать свой 1d-алгоритм для каждой строки или столбца
3. @jdweng из его кода похоже, что это 2d-массив строк, каждая строка которого содержит полный заголовок. Если это не так, он должен обновить вопрос, чтобы быть более конкретным.
4. Первая проблема код ищет строку только в начале строки, поскольку он использует Compare и будет работать только в том случае, если строка точно соответствует размеру строки. Поэтому вместо сравнения следует использовать Contains . Вторая проблема: код предполагает, что массив отсортирован. В-третьих, в тесте для цикла while отсутствует одно сравнение из-за <= 1.