Бинарный поиск итеративным методом

83
22 февраля 2022, 02:20

сделал программу бинарного поиска через цикл итерациями, как я понял можно ускорить поиск если внести некоторые изменения В коде выделил что и как я предполагаю можно изменить для ускорения, подскажите пожалуйста прав или нет? вроде программа работает

Подскажите пожалуйста как переделать условные операции, с помощью них же можно ускорить алгоритм?

    public static int BinarySearchWhile(int desiredValue, int[] array)
    {
        int left = 0;
        int right = array.Length; // правильно ли я понимаю что здесь границу поиска можно/нужно сделать array.Length - 1 ?
        while (left < right) // здесь возможно для ускорения сделать так left <= right ??
        {
            int middle = left + (right - left) / 2;
            if (array[middle] == desiredValue)
            {
                return middle;
            }
            if (array[middle] > desiredValue)
            {
                right = middle; // здесь точнее будет middle - 1 ??
            }
            else
            {
                left = middle + 1;
            }
        }
        return -1;
    }
Answer 1
public static int BinarySearchTree<T>(T[] array, int left, int right, T key) where T: IComparable
{
    while (left <= right)
    {
        int middle = (left + right) / 2;
        switch (key.CompareTo(array[middle]))
        {
            case 0:
                return middle;
            case 1:
                right = middle - 1;
                break;
            case -1:
                left = middle + 1;
                break;
        };
    }
    return -1;
}

Вызов

 int[] mass = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
 var result = Search.BinarySearchTree(mass, 0, mass.Length - 1, 9);
READ ALSO
DataGridView поиск и обновление данных

DataGridView поиск и обновление данных

Как при передачи объекта в dataGridView, найти нужную строку и обновить ее не затрагивая остальные строкиЯ делаю вот так: dataGridView

102
Работа с классами,объекты

Работа с классами,объекты

Каким образом возможно передать массиву Intermediate_Cpp[3] класса Course{}; ,который в свою очередь является объектом этого класса,объекты student1, student2,...

103
Проблема с использование функции в двух обьектах C++

Проблема с использование функции в двух обьектах C++

При использовании одной в двух обьектах работает только один, второй отказываетсяИгра Кораблики , функция начинает игру и используется в двух...

91