Banned
Регистрация: 06.03.2017
Сообщений: 788
Сказал(а) спасибо: 0
Поблагодарили 18 раз(а) в 4 сообщениях
Репутация: 5680
|
Ну или так, в соответствии с вышеизложенной мной идеей.
Из недостатков - расход памяти на доп. массивы, но зато высокоуровенный стиль и большая понятность для начинающих:
Код:
var
arRnd, arOdd, arEven: array of integer;
const
maxValue = 9; // Max value of rnd
maxLen = 30; // arRnd.Length
begin
SetLength(arRnd, maxLen);
SetLength(arOdd, maxLen);
SetLength(arEven, maxLen);
// Init
for var i := Low(arRnd) to High(arRnd) do
arRnd[i] := random(MaxValue + 1);
// Sort up
arRnd.Sort;
write('len=', arRnd.Length,' ', arRnd);
writeln();
// separate odd and even
var j: integer = 0;
var k: integer = j;
for var i := High(arRnd) downto Low(arRnd) do
begin
case Odd(arRnd[i]) of
True: begin
arOdd[j] := arRnd[i];
Inc(j);
end;
False: begin
arEven[k] := arRnd[i];
Inc(k);
end;
end;
end;
// truncate
SetLength(arOdd, j);
SetLength(arEven, k);
// sort up
arEven.Sort;
// splice
for var i := Low(arOdd) to High(arOdd) do
arRnd[i] := arOdd[i];
for var i := Low(arEven) to High(arEven) do
arRnd[j + i] := arEven[i];
// out
write('j=',j,' ',arOdd);
writeln();
write('k=',k,' ', arEven);
writeln();
write('j+k=',j+k,' ', arRnd);
end.
Код:
len=30 [0,1,1,1,2,2,2,3,3,3,3,4,5,5,5,6,6,6,7,7,7,7,7,7,7,8,8,8,9,9]
j=19 [9,9,7,7,7,7,7,7,7,5,5,5,3,3,3,3,1,1,1]
k=11 [0,2,2,2,4,6,6,6,8,8,8]
j+k=30 [9,9,7,7,7,7,7,7,7,5,5,5,3,3,3,3,1,1,1,0,2,2,2,4,6,6,6,8,8,8]
|