Solution# 1: We will start with three pointers: a_end, a_tail and b_tail where;
a_end - last memory location of A
a_tail - last non-zero element of A
b_tail - last non-zero element of B
We start the merge from the end by comparing elements at a_tail and b_tail and putting the greater one at a_end. Here is the code,
a_end - last memory location of A
a_tail - last non-zero element of A
b_tail - last non-zero element of B
We start the merge from the end by comparing elements at a_tail and b_tail and putting the greater one at a_end. Here is the code,
void mergeArrays(int* A, int* B, int a_size, int b_size)
{
int a_end = a_size + b_size - 1;
int a_tail = a_size - 1;
int b_tail = b_size - 1;
while((a_tail >= 0) && (b_tail >= 0))
{
if(B[b_tail] > A[a_tail])
A[a_end--] = B[b_tail--];
else
A[a_end--] = A[a_tail--];
}
while(b_tail >=0)
A[a_end--] = B[b_tail--];
}
void main()
{
int A[200] = {0,};
int B[50] = {0,};
int i;
for(i=80; i<230; i++)
A[i-80] = i*2;
for(i=0; i<50; i++)
B[i] = i;
mergeArrays(A, B, 150, 50);
for(i=0; i<200; i++)
printf("A[%d] = %d\n", i, A[i]);
}
No comments:
Post a Comment