Ну вот, ваша интерпретация. Действительно, чуть сложнее, но тоже без вспомогательных массивов:
Код:
Type
Ar=Array[1..255] of Byte;
Var
A:Ar;
k,N,i:Byte;
Procedure Exch(q:byte; var C:Ar);
Var
Mx1,Mx2:Integer;
D,m,p:byte;
begin
p:=1+q;
Mx1:=-1;
for m:=1+q to N do
if (C[m]>Mx1) and ((C[m] mod 2)=1) then
begin
p:=m;
Mx1:=C[p];
end;
if Mx1>-1 then
begin
D:=C[1+q];
C[1+q]:=C[p];
C[p]:=D;
end;
p:=1+q;
Mx2:=-1;
for m:=1+q to N-q do
if (C[m]>Mx2) and ((C[m] mod 2)=0) then
begin
p:=m;
Mx2:=C[p];
end;
if Mx2>-1 then
begin
D:=C[N-q];
C[N-q]:=C[p];
C[p]:=D;
end;
end;
Begin
Randomize;
Write(' N = ');
Readln(N);
Writeln('Initial array:');
for i:=1 to N do
begin
A[i]:=Random(100);
write(A[i]:4);
end;
writeln;
writeln;
for k:=0 to N-1 do Exch(k,A);
Writeln('Ordered array:');
for i:=1 to N do write(A[i]:4);
Readln
End.