Advertisement
Masfiq_ds_algo

ALGR: D&C: median

May 2nd, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.22 KB | None | 0 0
  1. /*
  2. *   Masfiq
  3. *   2 may, 2017
  4. *
  5. *   Problem: find the median of two sorted(ascending) array(same length) after merging.
  6. *   Solution: We used Div & Conq approach as a efficient manner
  7. */
  8. #include<bits/stdc++.h>
  9. using namespace std;
  10.  
  11. int median(int arr[],int n);
  12.  
  13. int getMedian(int arr1[], int arr2[], int n){
  14.     if(n<=0)return -1;
  15.     if(n==1)return (arr1[0]+arr2[0])/2;
  16.     if(n==2)return (max(arr1[0],arr2[0])+min(arr1[1],arr2[1]))/2;
  17.  
  18.     int m1=median(arr1,n);
  19.     int m2=median(arr2,n);
  20.  
  21.     if(m1==m2)return m1;
  22.     if(m1<m2){
  23.         if(n%2==0)return getMedian(arr1+n/2-1, arr2, n/2+1);
  24.         return getMedian(arr1+n/2, arr2, n/2+1);
  25.     }
  26.     else{
  27.         if(n%2==0)return getMedian(arr2+n/2-1, arr1, n/2+1);
  28.         return getMedian(arr2+n/2, arr1, n/2+1);
  29.     }
  30. }
  31. int median(int arr[],int n){
  32.     if(n%2==0)return (arr[n/2-1]+arr[n/2])/2;
  33.     return arr[n/2];
  34. }
  35. int main(){
  36.     int ar1[] = {1, 2, 3, 6};
  37.     int ar2[] = {4, 6, 8, 10};
  38.     int n1 = sizeof(ar1)/sizeof(ar1[0]);
  39.     int n2 = sizeof(ar2)/sizeof(ar2[0]);
  40.     if (n1 == n2)
  41.         printf("Median is %d", getMedian(ar1, ar2, n1));
  42.     else
  43.         printf("Doesn't work for arrays of unequal size");
  44.     return 0;
  45.     return 0;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement