:.: Алгоритмы Поиска :.:
[1] Для начала самы простой и удобный алгоритм поиска необходимого элемента st в массиве b[]. Основа алгоритма лежит в нехитрой строчке.
while b[i]<>st do inc(i);А вот и весь алгоритм:
var b: array[1..n] of something;
{n есть число на 1 большее размера массива}
{т.е. если размерность массива 10 то n=11}
i: integer;
st: something;
begin
{заполнение массива b}
{считывание образца необходимого элемента в перем. st}
i:=1;
b[n]:= st;
while b[i]<>st do inc(i);
if i=n then {значит элемента нет}
else {элемент найден, его номер=i};
end.
[2] Алгоритм поиска максимального (минимального) элемента в массиве и порядкового номера этого элемента.
var b: array[1..n] of something;
k, i: integer;
begin
k:=1;
for i:=1 to n do
if b[i]>b[k] then k:= i;
end.
Теперь при помощи команды writeln(b[k]) мы получим наибольший элемент массива, где k - его порядковый номер в этом массиве.
[3] Сокращение области поиска или бинарный (двоичный) поиск. Основная идея заключается в следуещем. Пусть массив отсортирован в порядке убывания. Находим средний элемент массива. b[m], где m=(n+1) div 2 и сравниваем его с элементом x. Если средний элемент равен x то поиск заканчивается. Если он меньше (больше) х то вес элементы с индексом большими (меньшими) или равными m можно не рассматривать. При выполнении данного алгоритма придется на каждом шаге пересчитывать границы поиска. Так на первом шаге левая граница l=1, правая r=n. На втором шаге либо левая, либо правая границапоменяет свое значение.
var b: array[1..n] of something;
l, r, m: integer;
p: boolean;
x: something;
begin
l:=1;
r:=n;
while (l<=r) and (p=false) do begin
m:= (r+l) div 2;
if b[m] = x then p:= true else
if b[m]>x then l:=m+1 else r:= m-1;
end;
end.
:.: Алгоритмы на Каждый День :.:
Q1: Как поменять местами два элемента массива не используя промежуточных данных?a[1]:= a[1] + b[1]; b[1]:= a[1] - b[1]; a[1]:= a[1] - b[1];
:.: Post Scriptum :.:
Почти все, что Вы здесь прочли является авторским материалом и принадлежит Timon PC (c). Так что если Вы захотите разместить данный материал на своем сайте или в любом другом массовом проекте, то просьба оповестить меня и только с моего согласия приступать к дальнейшим действиям. К тому же я и совсем не жадный (всегда можно договориться) :-) Большое спасибо!