Добавил:
ikot.chulakov@gmail.com Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы по Delphi с готовыми программами / Лабораторная работа №4 Массивы. Сортировка и поиск.pdf
Скачиваний:
21
Добавлен:
12.07.2020
Размер:
305.18 Кб
Скачать

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

dec(n); //уменьшаем длину массива end

else begin

writeln('Invalid index'); readln;

Halt(0);

end;

//Вывод элементов массива на экран

for i:=1 to n do writeln('a[', i, ']=', a[i]:6:2);

readln;

end.

Поиск

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

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

Последовательный поиск заключается в выборе каждого элемента массива и сравнения его с искомым. Быстродействие алгоритма пропорционально числу элементов. Реализация этого алгоритма с помощью цикла for … to … do приведена в листинге 5

Листинг 5

program Search;

{$APPTYPE CONSOLE}

const nmax=5; //емкость массива

var a:array [0..nmax] of real; //массив

index:integer;

//индекс искомого элемента

Value:real;

//значение элемента для поиска

i

:Integer;

 

begin

writeln('Vvedite massiv ', nmax+1, 'elements');

//Ввод массива for i:=1 to nmax do

begin

write('a[', i, ']='); readln(a[i]);

end;

//элемент для поиска

writeln('Input element for search'); readln(Value);

//поиск index:=-1;

for i:=Low(a) to High(a) do if a[i]=Value then

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

begin index:=i; break;

end;

if index>=0 then //если элемент найден writeln('Element found in ', index, ' position')

else //если элемент не найден writeln('Element not found!');

readln;

end.

Бинарный поиск

Алгоритм бинарного поиска применим только для отсортированного массива. Бинарный поиск работает следующим образом. Берем средний элемент массива и проверяем равен ли он искомому элементу,. если равен, то поиск окончен. В противном случае, если искомый элемент меньше среднего, то можно сказать, что если элемент присутствует в массиве, то он находится в первой его половине. С другой стороны, если искомый элемент больше среднего, то он находится во второй части массива. Таким образом, одним сравнением удалось локализовать искомый элемент в массиве двое меньшей размерности. Описанная операция повторяется до тех пор, пока искомый элемент не будет найден (если он присутствует в массиве). Так как при каждом выполнении цикла размер массива уменьшается в два раза, то быстродействие алгоритма будет пропорционально log2 n . Так, например для поиска в массиве из 256 элементов

понадобится произвести всего 8 сравнений. Реализация алгоритма приведена в листинге 6.

Листинг 6

program Search2;

{$APPTYPE CONSOLE}

const n=10;//длина массива

var a:array [0..n-1] of integer=(1,2,3,4,5,16,17,56,78,110);

l,

//левый индекс

r,

//правый индекс

m:integer; //индекс среднего элемента el:integer;//значение искомого элемента

begin

write('Vvedite element dlia poiska '); readln(el);

l:=0; r:=n-1;

while l<=r do begin

m:=(l+r) div 2;//вычисляем индекс среднего элемента

{если значение среднего элемента меньше искомого значения, то переместить левый индекс на позицию до среднего индекса} if a[m]<el then l:=succ(m)

{если значение среднего элемента больше искомого значения, то переместить правый индекс на позицию после среднего

индекса} else

if a[m]>el then r:=pred(m)