Author: Gour Ch. Saha
Contact for any query:: gour_ch_saha@yahoo.co.in
#include<stdio.h>
#define TRUE 1
#define FALSE 0
float find_median(int *a, int n1 , int *b , int n2);
void main()
{
int a[10]={3,4,5,6,7,8,9};
int b[10]={1,2};
float median;
median=find_median(a,4,b,1);
printf("The median is %f\n",median);
}
float find_median(int *a, int n1 , int *b , int n2)
{
int n , even_flg = FALSE;
int acount , bcount , ccount;
float median;
int a_overflow=FALSE;
int b_overflow=FALSE;
acount=0;
bcount=0;
n=(n1+n2)/2;
if((n1+n2)%2==0)
{
even_flg=TRUE;
}
for(ccount=0;ccount<n && acount<n1 && bcount<n2 ; ccount++)
{
if(a[acount]<b[bcount])
{
acount++;
}
else
{
bcount++;
}
}
while(ccount<n && acount<n1)
{
ccount++;
acount++;
}
while(ccount<n && bcount<n2)
{
ccount++;
bcount++;
}
if(acount>=n1)
{
acount--;
a_overflow=TRUE;
}
if(bcount>=n2)
{
bcount--;
b_overflow=TRUE;
}
if(even_flg == TRUE)
{
if( (acount+1<n1 && a[acount]<b[bcount])||
(b_overflow==TRUE))
{
printf("First if\n");
median = (float)(a[acount]+a[acount-1])/2;
}
else if( (bcount+1 <n2 && b[bcount]<a[acount])||
(a_overflow==TRUE) )
{
printf("Second if\n");
median = (float)(b[bcount]+b[bcount-1])/2;
}
else if(a_overflow==TRUE)
{
printf("Third if\n");
median = (float)(a[acount]+b[bcount])/2;
}
}
else if(b_overflow==TRUE)
{
median=(float)a[acount];
}
else if(a_overflow==TRUE)
{
median=(float)b[bcount];
}
else if(a[acount]<b[bcount])
{
median=(float)a[acount];
}
else
{
median=(float)b[bcount];
}
return median;
}