Приветствую всех, сегодня рассмотрим несколько алгоритмов поиска. Поиск часто встречается в приложениях с работой текстами или базами данных, и частенько приходиться их применять. Вариаций поисков много, при реализации их стоит учитывать некоторые специфические моменты. А так же скорость работы этих методов.
Алгоритм Бинарный поиск:
static int FindIndexByBinarySearch(int[] array, int element)
{
var left = 0;
var right = array.Length - 1;
while (left < right)
{
var middle = (right + left) / 2;
if (element <= array[middle])
right = middle;
else left = middle + 1;
}
if (array[right] == element)
return right;
return -1;
}
public static void Main()
{
var array = new[]{1,2,3,4,5,5,5,6};
Console.WriteLine(FindIndexByBinarySearch(array, 5));
}
Разберем код, мы создаем целочисленный массив со значениями и передаем его в метод FindIndexByBinarySearch в методе происходит вычисление, результат который возвращает индекс найденного числа в метод Main, однако если число не будет найдено вернет -1. Суть метода сводиться к тому, что массив чисел делиться по индексу на 2, до тех пор пока не останется один элемент, который сравнивается с заданным числом и если они равны выводиться результат.
Алгоритм Линейный поиск:
static int FindIndex(int[] array, int element)
{
for (int i = 0; i < array.Length; i++)
if (array[i] == element)
return i;
return -1;
}
static int FindIndex(string[] array, string element)
{
for (int i = 0; i < array.Length; i++)
if (array[i] == element)
return i;
return -1;
}
Разберем код алгоритма линейного поиска, у нас два метода, которые принимают один из них массив строк другой массив чисел и у каждого метода элемент поиска. Внутри метода имеется цикл for который производит по элементную сверку с заданным элементом в метод, в случаи если элемент найден, то будет выполнен return с найденным элементом, если искомый элемент не найден соответственно выполнен return который вернет -1. Линейный поиск алгоритма хорош тем что его можно реализовать как с цифрами, так и символами и строками, один не достаток его в том что если передать большой объем массива, то этот код может быть выполнятся длительное время и это стоит учитывать.
