Последовательный поиск элемента в массиве

Линейный или последовательный поиск - самый простой из алгоритмов поиска элемента в массиве.

Алгоритм заключается в обходе всех элементов массива, как правило, слева на право, и сравнения их с искомым значением. Если значения элемента и ключа совпадают, то поиск возвращает индекс элемента.

По скольку линейный алгоритм, обходит массив последовательно, он очень медленный.

Тем не менее этот метод используется для поиска:

  • на небольших массивах данных;
  • в потоковой обработке данных;
  • поиске минимального и максимального значения массива;
  • на одиночных неупорядоченных больших массивах.

Программа для последовательного поиска элемента массива

{$CODEPAGE UTF8}
program SequentialSearch;
const
  arrayLength = 10;
var
  inputArray : array [1..arrayLength] of integer;
  index, key: integer;

{функция для последовательного поиска}
function LinearSearch(k : integer): integer;
var
  i : integer;
begin
  i := 1;
  while (i <= arrayLength) do
  begin
    if inputArray[i] = k then
      begin
        LinearSearch := i;
        Exit;     {досрочное завершение функции}
      end;
    i := i + 1;
  end;

  {сюда попадаем в случае если ничего не нашли}
  LinearSearch := -1;
end;

begin
  randomize;
  writeln ('Исходный массив: ');
  {заполнение случайными числами}
  for index := 1 to arrayLength do
  begin
    inputArray[index] := random(100);
    write (inputArray[index]:4);
  end;
  writeln;
  write('Искомое значение ');
  readln(key);

  index := LinearSearch(key);
  if index = -1 then
      writeln ('Элемент не найден')
  else
    writeln ('Индекс элемента в массиве ', index);
  readln;
end.

Функция для линейного поиска с использованием цикла for

В функции используется цикл while do, можно легко модифицировать программу использовав цикл for.

function LinearSearch(k : integer): integer;
var
  i : integer;
begin
  for i := 1 to arrayLength do
    if inputArray[i] = k then
      begin
        LinearSearch := i;
        Exit;     {выход из функции последовательного поиска}
      end;

  {возвращаем -1 если ничего не нашли}
  LinearSearch := -1;
end;

Смотрите также: