Вот мое решение. Довольно рационально по скорости, нерациональное по памяти и достаточно запутанное...
Код:
program Project2;
var
i,j,k,n,m,di,dj: Integer;
a,b,c: array[0..999] of Integer;
x,y: boolean;
begin
// Ввод...
Read(n);
for i:=0 to n-1 do
Read(a[i]);
Read(m);
for i:=0 to m-1 do
Read(b[i]);
// В зависимости от направления упорядоченности массивов _
// устанавливаем начальные значения счетчиков и приращения
if (n>1) and (a[1]>a[0]) then
begin
i:=0;
di:=1;
end
else
begin
i:=n-1;
di:=-1;
end;
if (m>1) and (b[1]>b[0]) then
begin
j:=0;
dj:=1;
end
else
begin
j:=m-1;
dj:=-1;
end;
// ну а теперь большой цикл, в котором все и происходит...
k:=0; // счетчик для нового массива
x:=true; // флаг, что у нас массивы не кончились
while x do
begin
y:=true; // По умолчанию копируем из массива "а"
if (i>=0) and (i<n) then
begin
if (j>=0) and (j<m) then
begin
if a[i]>b[j] then
y:=false; // Если не кончились оба массива и a[i]>b[j], то копируем из массива "b"
end
end
else
begin
if (j>=0) and (j<m) then
y:=false
else
x:=false; // Если оба массива кончились - завершаем цикл
end;
if x then
begin
if y then
begin
c[k]:=a[i];
i:=i+di;
end
else
begin
c[k]:=b[j];
j:=j+dj;
end;
end;
Inc(k);
end;
// Вывод...
for i:=0 to m+n-1 do
Write(c[i],' ');
end.
я уже не уверен, что это работает, я писал в дельфи и с файловых IO, потом переписывал...