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