Одномерные массивы. Алгоритмы поиска элемента массива
Линейный поиск.Алгоритм.Последовательно просматриваем массив и сравниваем значение очередного элемента с данным, если значение очередного элемента совпадет с Х, то запоминаем его номер в переменной k.For i := 1 to n do if a[i] = x then k := i;Недостатки данной реализации алгоритма:находим только последнее вхождение элементав любом случае производится n сравнений
Улучшим: будем прерывать поиск, как только найдем элемент:while (i <= n ) and ( a[i] <> x) do inc(i);В результате или найдем нужный элемент, или просмотрим весь массив.Недостаток данной реализации: в заголовке цикла сложное условие, что замедляет поиск.
Бинарный поиск Применяется для отсортированных массивов!!!!!!!.
Алгоритм Является ли Х средним элементом массива. Если да, то поиск завершен, иначе переходим к пункту 2.Возможно 2 случая:Х меньше среднего, тогда так как А упорядочен, то из рассмотрения можно исключить все элементы массива, расположенные правее среднего и применить метод к левой половине массива.Х больше среднего. Значит, исключаем из рассмотрения левую половину массива и применяем метод к правой части.
begin l := 1; r := n; {на первом шаге рассматриваем весь массив} f := false; {признак того, что Х не найден} while ( l <= r ) and not f do beginm := (l+r) div 2;if a[m] =x then f := true {элемент найден! Поиск прекращаем} else if x < a[m] then r:=m-1 {отбрасываем правую часть}else l := m + 1 {отбрасываем левую часть} end;
Задача. Дано Х и массив А(n), отсортированный по неубыванию Найти i, такой что a[i] = x или сообщить что данного элемента в массиве нет.