#include <stdio.h>
#define N 32
int merge(int startdes, int startsrc1, int startsrc2, int enddes, int endsrc1, int endsrc2, int a[N]) {
int b[N];
int c[N];
int i;
int j;
int n1, n2;
int k, l;
n1 = endsrc1 - startsrc1;
n2 = endsrc2 - startsrc2;
for (i = startsrc1, j = 0; i <= endsrc1; i++, j++)
b[j] = a[i];
for (i = startsrc2, j = 0; i <= endsrc2; i++, j++)
c[j] = a[i];
for(i = startdes, l = 0, k = 0; i < enddes; i++) {;
if((l < n1) && (k >= n2)) {
a[i] = b[l];
l++;
}
else if((l >= n1) && (k < n2)) {
a[i] = c[k];
k++;
}
else if(b[l] <= c[k]) {
a[i] = b[l];
l++;
}
else if(b[l] > c[k]) {
a[i] = c[k];
k++;
}
}
}
int main(void) {
int i;
int a[] = {1, 2, 3, 4, 1, 2, 3, 4};
printf("\n");
for(i = 0; i < 7; i+=2) {
merge(i, i, i+1, i+1, i, i+1, a);
printf("%i %i %i %i %i %i\n", i, i, i+2, i+3, i+1, i+3, a);
}
for(i = 0; i < 7; i+=4) {
merge(i, i, i+2, i+3, i+1, i+3, a);
printf("%i %i %i %i %i %i\n", i, i, i+2, i+3, i+1, i+3, a);
}
for(i = 0; i < 8; i++)
printf("%i\n", a[i]);
return 0;
}