И еще один вариант, где case заменен на if else, поскольку это тоже повышает (в общем случае) быстродействие.
Также исключены комментарии, поскольку высокоуровенный код и так является самодокументируемым.
Код:
var
arRnd, arOdd, arEven: array of integer;
var j: integer = 0;
var k: integer = j;
const
maxValue = 50; // Max value of rnd
maxLen = 30; // arRnd.Length
begin
SetLength(arRnd, maxLen);
SetLength(arOdd, maxLen);
SetLength(arEven, maxLen);
for var i := Low(arRnd) to High(arRnd) do
arRnd[i] := random(MaxValue + 1);
// Основное тело вычислений
for var i := Low(arRnd) to High(arRnd) do
if Odd(arRnd[i]) then begin
arOdd[j] := arRnd[i]; Inc(j);
end else begin
arEven[k] := arRnd[i]; Inc(k);
end;
SetLength(arOdd, j);
SetLength(arEven, k);
arOdd.Sort;
Reverse(arOdd);
arEven.Sort;
for var i := Low(arOdd) to High(arOdd) do
arRnd[i] := arOdd[i];
for var i := Low(arEven) to High(arEven) do
arRnd[arOdd.Length + i] := arEven[i];
end.
P.S.
ЯП - PascalABC.Net.
Практически все это доступно на FreePascal и Delphi.