====== Линейный поиск ======
===== Описание =====
Суть линейного поиска состоит в том, что поочерёдно сверяются значения элементов массива с искомым значением, пока не достигнут конец массива.\\
Допустим, ''x'' - искомое значение в массиве ''A'' целых чисел размера ''N'' элементов.
Условиями поиска являются:\\
- проверка выхода за границы массива (i <= N)
- проверка, является ли текущий элемент искомым (A[i] <> x)
Итак, алгоритм таков:
Установить счётчик в начальное положение
Цикл Пока (не достигнут конец массива) И (Элемент массива не явдяется искомым) Выполнять
Увеличение счётчика
или на Паскале:
i := 1;
while (i <= N) And (A[i] <> x) do
Inc (i);
Таким образом, искомый элемент ''x'' считается найденным в массиве ''A'', если индекс позиции ''i'' находится в пределах ''1..N''. Если же ''i > N'', то элемент не был найден в массиве.
===== Пример =====
const
N = 12;
type
TArr = array[1..N] of integer;
{ заполнение массива случайными значениями }
procedure GenArrayVal (var V: TArr; const n: integer);
var
k: integer;
begin
randomize;
for k := 1 to N do
V[k] := random(10);
end;
{ вывод на экран массива }
procedure PrintArrayVal (var V: TArr; const n: integer);
var
i: integer;
begin
for i := 1 to N do
write (V[i]:4);
writeln;
end;
{ линейный поиск }
function LinearSearch (x: integer; A: TArr): integer;
var
i: integer;
begin
i := 1;
while (i <= N) And (A[i] <> x) do
Inc (i);
LinearSearch := i
end;
var
V: TArr;
x, i: integer;
begin
GenArrayVal (V, N);
PrintArrayVal (V, N);
x := 5; { искомое значение }
i := LinearSearch (x, V);
if i > N then
writeln (x, ' не найден.')
else
writeln (x, ' найден у позиции #', i)
end.