Двоичный поиск по 2D массиву

#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.