В программировании поиск — одна из наиболее часто встречающихся задач невычислительного характера. Можно выделить следующие типовые задачи поиска:
найти наибольший (наименьший) элемент массива;
найти элемент массива, значение которого равно заданному значению.
Компьютер не может сравнить разом весь ряд объектов. На каждом шаге он может сравнивать только два объекта. Поэтому в программе необходимо организовать последовательный просмотр элементов массива и сравнение значения очередного просматриваемого элемента с неким образцом.
Рассмотрим подробно решение задач первого типа (нахождение наибольшего (наименьшего) элемента). Представим себе одномерный массив в виде стопки карточек, на каждой из которых написано число. Тогда идея поиска наибольшего элемента массива может быть представлена следующим образом:
возьмём верхнюю карточку (первый элемент массива), запомним имеющееся на карточке число (запишем его мелом на доске) как наибольшее из просмотренных; уберём карточку в сторону;
возьмём следующую карточку; сравним числа, записанные на карточке и на доске; если число на карточке больше, то сотрём число, записанное на доске, и напишем там то же число, что и на карточке; если же новое число не больше, то на доске оставим имеющуюся запись; уберём карточку в сторону;
повторим действия, описанные в пункте 2 , для всех оставшихся карточек в стопке.
В итоге на доске будет записано самое большое значение просмотренного массива.
Так как доступ к значению элемента массива осуществляется по его индексу, то при организации поиска наибольшего элемента в одномерном массиве правильнее искать его индекс.
Результатом решения задачи второго типа (нахождение элемента массива, значение которого равно заданному значению) может быть:
n — индекс элемента массива такой, что a[n]=x , где x — заданное число;
сообщение о том, что искомого элемента в массиве не обнаружено.
Алгоритм поиска в сформированном нами массиве a значения, равного 50 , может выглядеть так:
n:=0;
for i:=1 to 10 do
if a[i]=50 then n:=i;
if n=0 then write ('Нет') else write (i)
В этой программе последовательно просматриваются все элементы массива. Если в массиве несколько элементов, значения которых равны заданному числу, то программа найдет последний из них.
Во многих случаях требуется найти первый из элементов, имеющих соответствующее значение, и дальнейший просмотр массива прекратить. Для этой цели можно использовать следующую программу:
i:=0;
repeat
i:=i+1;
until(a[i]=50) or (i=10);
if a[i]=50 then write (i) else write ('Нет');
Здесь выполнение алгоритма будет прервано в одном из двух случаев:
в массиве найден первый из элементов, равный заданному;
все элементы массива просмотрены.
Зачастую требуется определить количество элементов, удолетворяющих некоторому условию. В этом случае вводится переменная, значение которой увеличивается на единицу каждый раз, когда найден нужный элемент.