#include <stdio.h>

int lSize = 4;
int rSize = 3;
int L[4] = {1, 3, 6, 7};
int R[4] = {1, 2, 4};
int finalArray[7];

void merge()
{
    int lIndx = 0;
    int rIndx = 0;
    int i = 0;

    for (i = 0; i < (lSize + rSize); i++) {
	if (L[lIndx] <= R[rIndx]) {
	    finalArray[i] = L[lIndx++];
	    if (lIndx == lSize) {
		break;
	    }
	} else {
	    finalArray[i] = R[rIndx++];
	    if (rIndx == rSize) {
		break;
	    }
	}
    }

    i++;
    if (lIndx != lSize) {
	while(1) {
	    finalArray[i++] = L[lIndx++];

	    if (lIndx == lSize) {
		return;
	    }
	}
    }
    if (rIndx != rSize) {
	while(1) {
	    finalArray[i++] = R[rIndx++];

	    if (rIndx == rSize) {
		return;
	    }
	}
    }
}

void display()
{
    int i = 0;

    printf("\n\nArray1: ");
    for (i = 0; i < lSize; i++) {
	printf("%d ", L[i]);
    }

    printf("\nArray2: ");
    for (i = 0; i < rSize; i++) {
	printf("%d ", R[i]);
    }

    printf("\nMerge array: ");
    for (i = 0; i < lSize+rSize; i++) {
	printf("%d ", finalArray[i]);
    }
}

int main()
{
    // Test 1
    merge();
    display();

    // Test 2
    R[0] = 1;
    R[1] = 3;
    R[2] = 6;
    R[3] = 7;
    L[0] = 1;
    L[1] = 2;
    L[2] = 4;
    lSize = 3;
    rSize = 4;
    merge();
    display();

    // test 3
    L[0] = 1;
    R[0] = 1;
    lSize = 1;
    rSize = 1;
    merge();
    display();

    return 0;
}
