Да, очень интересная задача.
Смотря как ее представить. Допустим есть общий массив A. Разобьем его на два массива 1 и 2.
Т.е. A=1+2
Допустим, что эти массивы уже отсортированы.
Пусть массив 1 состоит из 4 элементов 1,2,3,4
Пусть массив 2 состоит из 4 элементов 5,6,7,8
И вот здесь нужно эти массивы соеденить в один. Это сделать можно, но не во всех языках программирования. Некоторые языки программирования проверяют диапазон индексов.
Можно конечно эту проверку отключить и попробовать.
Я нашел удивительно интересное решение этой задачи с помощью TPASCAL. Там есть один оператор при помощи которого можно склеить два одинаковых по размерам массива в один. Это оператор MOVE, но потом я также нашел способ при котором можно обойтись и без него. Ведь вся проблема этой задачи - склеить два одинаковых по размерностям массива и все. И если даже они не отсортированы, то их можно отсортировать после того как они будут соеденены в один. Почему так - массивы могут быть представлены и таким
образом:
1 - 1,6,4,7
2 - 5,2,8,3
В этом случае хоть их и сортируй отдельно, все равно надо сортировать в общем массиве A. Мне лично удобно сортировать "пузырьковой сортировкой". Можете попробовать другую.
Привожу алгоритмы на TPASCAL
I вариант --- массивы 1 и 2 правильно отсортированы.
==================================================
uses crt;
var
A : array[1..4] of integer;
B : array[1..4] of integer;
dla:integer;
i:integer;
BEGIN
ClrScr;
A[1]:=1;
A[2]:=2;
A[3]:=3;
A[4]:=4;
B[1]:=5;
B[2]:=6;
B[3]:=7;
B[4]:=8;
dla:=4; {кол.элементов в каждом массиве}
{4 в цикле i:=4 то же кол. элементов в массиве}
for i:=4 downto 1 do A[i+dla]:=B(i); {Здесь у массива B квадратные скобки}
for i:=1 to 8 do write(A(i),' '); {Здесь у массива A квадратные скобки}
writeln;
(* Получаем 1 2 3 4 5 6 7 8 *)
writeln('Дальше - Enter');
READLN;
END.
==================================================
II вариант --- массивы 1 и 2 неотсортированы.
==================================================
uses crt;
var
A : array[1..5] of integer; {1 массив}
B : array[1..5] of integer; {2 массив}
dla:integer;
i,j:integer;
men:integer;
n:integer;
BEGIN
ClrScr;
A[1]:=5;
A[2]:=2;
A[3]:=8;
A[4]:=4;
A[5]:=10;
B[1]:=1;
B[2]:=6;
B[3]:=7;
B[4]:=3;
B[5]:=9;
dla:=5; {кол.элементов в каждом массиве}
{5 в цикле i:=5 то же кол. элементов в массиве}
for i:=5 downto 1 do A[i+dla]:=B(i); {Здесь у массива B квадратные скобки}
n:=10; {Общее кол. элементов в массиве}
{-------------- Сортируем массив -----------------}
for i:=1 to n-1 do begin
for j:=1 to n-1 do begin
if A[j+1]<=A[j] then begin
men:=A[j];
A[j]:=A[j+1];
A[j+1]:=men
end;
end;
end;
{-------------------------------------------------}
for i:=1 to 10 do write(A(i),' '); {Здесь у массива A квадратные скобки}
writeln;
(* Получаем Массив A 1 2 3 4 5 6 7 8 9 10 *)
writeln('Дальше - Enter');
READLN;
END.
==================================================
Возможно это и есть какой то путь решения?
Зато ВЫ не применяете 3 массив и даже при сортировке.
Такую же задачу наверно возможно решить и в C/C++. Я не пробовал - не было времени.
Я эти два алгоритма проверял. У меня работают. Брал больше элементов - до 100, также работают. Программа сбоя не давала. Возможно, есть еще и другие варианты решения, но их надо искать.
Я привел легкий пример с незначительным количеством элементов в каждом массиве.
С уважением
LEND