program TernarySearchProgram;
type
IntArray = array[1..12] of integer;
function TernarySearch(l, r, key: integer; var vec: IntArray): integer;
var
mid1, mid2: integer;
begin
while l <= r do
begin
mid1 := l + (r - l) div 3;
mid2 := r - (r - l) div 3;
if vec[mid1] = key then
begin
TernarySearch := mid1;
exit;
end;
if vec[mid2] = key then
begin
TernarySearch := mid2;
exit;
end;
if key < vec[mid1] then
r := mid1 - 1
else if key > vec[mid2] then
l := mid2 + 1
else
begin
l := mid1 + 1;
r := mid2 - 1;
end;
end;
TernarySearch := -1; { not found }
end;
var
arr: IntArray;
index, tosearch: integer;
begin
{ initialize array }
arr[1] := 1;
arr[2] := 2;
arr[3] := 8;
arr[4] := 14;
arr[5] := 15;
arr[6] := 64;
arr[7] := 78;
arr[8] := 89;
arr[9] := 99;
arr[10] := 100;
arr[11] := 110;
arr[12] := 123;
tosearch := 89;
index := TernarySearch(1, 12, tosearch, arr);
if index <> -1 then
writeln('Element found at index: ', index)
else
writeln('Element not found.');
end.
(*
run:
Element found at index: 8
*)