I tried to implement the above algorithm in C++, but somehow I am getting a rounding error when computing the length of half of the array.
Attempt:
#include <iostream>
#include <math.h>
using namespace std;
void print_array(int arr[], int size){
for(int i = 0; i < size; i++){
cout << arr[i] << "-";
}
cout << endl;
}
float median_h(int arr[], int size){
float median = 0.0;
if(size%2 == 0)
median = (arr[size/2] + arr[(size/2)-1])/2;
else median = arr[(int)ceil(size/2)];
return median;
}
float median(int arr1[], int arr2[], int size_1, int size_2){
cout << size_1 << endl;
print_array(arr1,size_1);
cout << size_2 << endl;
print_array(arr2,size_2);
cout << endl;
float m1 = median_h(arr1,size_1);
float m2 = median_h(arr2,size_2);
float median_res = 0.0;
if(size_1 == 1)
median_res = (arr1[0] + arr2[0])/2;
else if(m1 == m2)
median_res = m1;
else{
int index = 0;
int size = ceil(size_1/2);
(size_1 % 2 == 0)? index = size_1/2 : index = floor(size_1/2);
if(m1 < m2)
median_res = median(arr1 + index,arr2, size, size);
else
median_res = median(arr1,arr2 + index, size, size);
}
return median_res;
}
int main(void){
int arr1[] = {1,12,15,26,38};
int arr2[] = {2,13,17,30,45};
float med = median(arr1,arr2,5,5);
cout << med << endl;
}
This is the output:
output:
5
1-12-15-26-38-
5
2-13-17-30-45-
2
15-26-
2
2-13-
1
15-
1
13-
14
I am expecting a length of 3 in the second recursive iteration, but I am getting 2. I don't know what's wrong with ceil(5/2). It's supposed to be 3.