от позиции ind} var
от позиции ind}
var i: index1;
begin
for i:= N-1 downto ind do
Mas[i] := Mas[i-1]
end; {ShiftRightArray}
procedure InsArray (var Mas: massive1; K: index1; Elem: item);
var i: index1;
begin
ShiftRightArray (Mas, k);
Mas[K] := Elem
end; {InsArray}
type
index1 = 0..N-1; {N > 1}
massive1 = array [index1] of item;
function Partition
(var Mas: massive1; 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;
Как видим, здесь на роль барьера выбрано значение элемента, располагающегося на середине входного подмассива. После завершения процедуры левый подмассив базируется на диапазоне индексов left..j, а правый, соответственно, на диапазоне j+1..right. Например, применив этот
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа