Как осуществить поиск заданного элемента на C#

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

Алгоритм Бинарный поиск:

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. Линейный поиск алгоритма хорош тем что его можно реализовать как с цифрами, так и символами и строками, один не достаток его в том что если передать большой объем массива, то этот код может быть выполнятся длительное время и это стоит учитывать.

Обновлено: 07.01.2018 — 17:03

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.