:.: Алгоритмы Поиска :.:
[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). Так что если Вы захотите разместить данный материал на своем сайте или в любом другом массовом проекте, то просьба оповестить меня и только с моего согласия приступать к дальнейшим действиям. К тому же я и совсем не жадный (всегда можно договориться) :-) Большое спасибо!