Merge two sorted arrays and find the median in the merged array

Given two sorted arrays, merge the two arrays into one single array and find the median of the merged array.

For example:

If the given input is :
5 //size of the array
1 3 5 7 9 //array a 
2 4 6 8 10 //array b

Then merged array will be 1 2 3 4 5 6 7 8 9 10

The median will always be middle two element's average as the size of the temp array will be even always.
so, the result is (5+6)/2 = 5 is the median.

Implementation:


#include <stdio.h>
#include <stdlib.h>

int main(void) {
 int *a,*b,n,i,*temp,j,l,r,mid;
 
 /* Get the number of elements of the array */
 scanf("%d",&n);
 
 /* Dynamically allocate the memory block of n integers and store the address of a */
 a=(int*)malloc(sizeof(int)*n);
 
 /* Dynamically allocate the memory block of n integers and store the address of b */
 b=(int*)malloc(sizeof(int)*n);
 
 /* Dynamically allocate the memory block of 2*n integers and store the address of temp */
 temp=(int*)malloc(sizeof(int)*2*n);
 
 /* Get the elements of the array a */
 for(i=0;i<n;i++)
  scanf("%d",(a+i));
 
 /* Get the elements of the array b */
 for(i=0;i<n;i++)
  scanf("%d",(b+i));
 /* Counter variable for array a */
 l=0; 
 
 /* Counter variable for array b */
 r=0;
 
 /* Counter variable for array temp */
 j=0;
 
 /* Until either one of the array becomes empty, store the elements in ascending order in temp */
 while(l<n && r<n)
 {
  if(*(a+l)<*(b+r))
  temp[j++]=a[l++];
  else
  temp[j++]=b[r++];
 }
 
 /* If still array b is not empty but array a is empty, copy all the remaining elements of the array b
 to temp */
 if(l==n)
 {
  while(r<n)
  temp[j++]=b[r++];
 }
 
 /* Else if still array a is not empty but array b is empty, copy all the remaining elements of the array a
 to temp */
 else
 {
  while(l<n)
  temp[j++]=a[l++];
 }
 
 /* finally print the temp array to get 2*n merged elements from the two sorted arrays */
 for(i=0;i<2*n;i++)
  printf("%d ",*(temp+i));
  
 printf("\n");
 
 /* Finding median */
 /* After merging n(odd or even) with same n, we always get 2*n as even number */
 /* so median is the average of the middle two elements */
 mid=(0+(2*n))/2;
 
 /* Printing average of the middle two elements of the merged array temp */
 printf("median is %d",(*(temp+mid) + *(temp+mid-1))/2);
 
 
 /* If you want to write the contents to either a or b array , use the below commented code */
 /*
 a=(int*)realloc(a,2*n);
 for(i=0;i<2*n;i++)
 *(a+i)=*(temp+i);
 printf("\n");
 for(i=0;i<2*n;i++)
 printf("%d ",*(a+i));
 */
 return 0;
}