left, right: index1):
left, right: index1): index1;
var i, j: index1; barrier: item;
begin
barrier := Mas[(left + right) div 2];
i := left;
j := right;
repeat
while (Mas[i] < barrier) do i := i+1;
while (Mas[j] > barrier) do j := j-1;
if i ? j then begin
Swap{Mas[i], Mas[j]}; i := i+1; j:= j-1
end;
until i > j;
Partition := j
end;
Обратите внимание, что описание функции Max с тремя указанными параметрами делает возможным возврат наибольшего элемента не обязательно для всего массива, но также и любого его подмассива. Для этого при вызове достаточно заменить границы диапазона обработки, входящего в интервал 0..N-1. Мы еще встретимся с таким применением механизма, например, при обсуждении одного из алгоритмов сортировки вектора.
Для второго варианта алгоритма, когда требуется установить местоположение искомого элемента в массиве, нужно лишь незначительно изменить обработку.
Алгоритм E2-1 (2)
function IndexMax (Mas: massive1; left, right: index1): index1;
var i,
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа