How to get the median of two sorted arrays in PHP

3 Answers

0 votes
function findMedianOfTwoSortedArrays($arr1, $arr2) {
    $size1 = count($arr1);
    $size2 = count($arr2);
    $merged = array_fill(0, $size1 + $size2, 0);
    $i = 0;
    $j = 0;
    $k = 0;
    
    while ($i < $size1 && $j < $size2) {
        if ($arr1[$i] < $arr2[$j]) {
            $merged[$k++] = $arr1[$i++];
        }
        else {
            $merged[$k++] = $arr2[$j++];
        }
    }
    
    while ($i < $size1) {
        $merged[$k++] = $arr1[$i++];
    }
    
    while ($j < $size2) {
        $merged[$k++] = $arr2[$j++];
    }
    
    $total = $size1 + $size2;

    if ($total % 2 == 0) {
        $mid1 = $merged[(int)(($total - 1) / 2)];
        $mid2 = $merged[(int)($total / 2)];
        $median = (float)($mid1 + $mid2) / 2.0;
    }
    else {
        $median = (float)$merged[(int)($total / 2)];
    }
    return $median;
}

$arr1 = array(1, 3, 5);

$arr2 = array(2, 4, 6);
        
$median = findMedianOfTwoSortedArrays($arr1, $arr2);

echo "Median: " . $median;




/*
run:

Median: 3.5

*/

 



answered Jul 19, 2023 by avibootz
0 votes
function findMedianOfTwoSortedArrays($arr1, $arr2) {
    $size1 = count($arr1);
    $size2 = count($arr2);
    $i = 0;
    $j = 0;
    $mid1 = -1;
    $mid2 = -1;
    
    if (($size2 + $size1) % 2 == 1) {
        for ($k = 0; $k <= (int)(($size1 + $size2) / 2); $k++) {
            if ($i != $size1 && $j != $size2) {
                $mid1 = ($arr1[$i] > $arr2[$j]) ? $arr2[$j++] : $arr1[$i++];
            }
            else if ($i < $size1) {
                $mid1 = $arr1[$i++];
            }
            else {
                $mid1 = $arr2[$j++];
            }
        }
        return $mid1;
    }
    else {
        for ($k = 0; $k <= (int)(($size1 + $size2) / 2); $k++) {
            $mid2 = $mid1;
            if ($i != $size1 && $j != $size2) {
                $mid1 = ($arr1[$i] > $arr2[$j]) ? $arr2[$j++] : $arr1[$i++];
            }
            else if ($i < $size1) {
                $mid1 = $arr1[$i++];
            }
            else {
                $mid1 = $arr2[$j++];
            }
        }
        return (float)($mid1 + $mid2) / 2;
    }
}

$arr1 = array(1, 3, 5);

$arr2 = array(2, 4, 6);
        
$median = findMedianOfTwoSortedArrays($arr1, $arr2);

echo "Median: " . $median;




/*
run:

Median: 3.5

*/

 



answered Jul 19, 2023 by avibootz
0 votes
function findMedianOfTwoSortedArrays($arr1, $arr2) {
    $merged = array_merge($arr1, $arr2);
    sort($merged);
 
    $total = count($arr1) + count($arr2);
  
    if ($total % 2 == 0) {
        $mid1 = $merged[(int)(($total - 1) / 2)];
        $mid2 = $merged[(int)($total / 2)];
        $median = (float)($mid1 + $mid2) / 2.0;
    }
    else {
        $median = (float)$merged[(int)($total / 2)];
    }
     
    return $median;
}
  
$arr1 = array(1, 3, 5);
  
$arr2 = array(2, 4, 6);
          
$median = findMedianOfTwoSortedArrays($arr1, $arr2);
  
echo "Median: " . $median;
  
  
  
  
/*
run:
  
Median: 3.5
  
*/

 



answered Jul 19, 2023 by avibootz
edited Jul 19, 2023 by avibootz
...