#include <iostream>
using
namespace
std;
int
nextGap(
int
gap)
{
if
(gap <= 1)
return
0;
return
(gap / 2) + (gap % 2);
}
int
mergeTwoSortedArray(
int
* arr1,
int
* arr2,
int
n,
int
m)
{
int
x = min(n, m);
for
(
int
i = 0; i < x; i++) {
if
(arr1[n - i - 1] > arr2[i])
swap(arr1[n - i - 1], arr2[i]);
}
for
(
int
gap = nextGap(n); gap > 0;
gap = nextGap(gap)) {
for
(
int
i = 0; i + gap < n; i++)
if
(arr1[i] > arr1[i + gap])
swap(arr1[i], arr1[i + gap]);
}
for
(
int
gap = nextGap(m); gap > 0;
gap = nextGap(gap)) {
for
(
int
i = 0; i + gap < m; i++)
if
(arr2[i] > arr2[i + gap])
swap(arr2[i], arr2[i + gap]);
}
for
(
int
i = 0; i < n; i++)
cout << arr1[i] <<
" "
;
for
(
int
j = 0; j < m; j++)
cout << arr2[j] <<
" "
;
}
int
main()
{
int
arr1[] = { 1, 5, 9, 10, 15, 20 };
int
n =
sizeof
(arr1) /
sizeof
(
int
);
int
arr2[] = { 2, 3, 8, 13 };
int
m =
sizeof
(arr2) /
sizeof
(
int
);
mergeTwoSortedArray(arr1, arr2, n, m);
return
0;
}