PHP Program for Median of two sorted arrays of same size
Last Updated :
24 Oct, 2023
Write a PHP program for a given 2 sorted arrays A and B of size n each. the task is to find the median of the array obtained by merging the above 2 arrays(i.e. array of length 2n). The complexity should be O(log(n)).
Examples:
Input: ar1[] = {1, 12, 15, 26, 38}
ar2[] = {2, 13, 17, 30, 45}
Output: 16
Explanation:
After merging two arrays, we get {1, 2, 12, 13, 15, 17, 26, 30, 38, 45}
The middle two elements are 15 and 17
The average of middle elements is (15 + 17)/2 which is equal to 16
Note : Since size of the set for which we are looking for median is even (2n), we need take average of middle two numbers and return floor of the average.
PHP Program for Median of two sorted arrays of same size using Simply count while Merging:
Use merge procedure of merge sort. Keep track of count while comparing elements of two arrays. If count becomes n(For 2n elements), we have reached the median. Take the average of the elements at indexes n-1 and n in the merged array.
Below is the implementation of the above approach:
PHP
<?php
// A Simple Merge based O(n) solution
// to find median of two sorted arrays
// This function returns median of
// ar1[] and ar2[]. Assumptions in
// this function: Both ar1[] and ar2[]
// are sorted arrays Both have n elements
function getMedian($ar1, $ar2, $n)
{
// Current index of i/p array ar1[]
$i = 0;
// Current index of i/p array ar2[]
$j = 0;
$count;
$m1 = -1; $m2 = -1;
// Since there are 2n elements,
// median will be average of elements
// at index n-1 and n in the array
// obtained after merging ar1 and ar2
for ($count = 0; $count <= $n; $count++)
{
// Below is to handle case where
// all elements of ar1[] are smaller
// than smallest(or first) element of ar2[]
if ($i == $n)
{
$m1 = $m2;
$m2 = $ar2[0];
break;
}
// Below is to handle case where all
// elements of ar2[] are smaller than
// smallest(or first) element of ar1[]
else if ($j == $n)
{
$m1 = $m2;
$m2 = $ar1[0];
break;
}
if ($ar1[$i] < $ar2[$j])
{
// Store the prev median
$m1 = $m2;
$m2 = $ar1[$i];
$i++;
}
else
{
// Store the prev median
$m1 = $m2;
$m2 = $ar2[$j];
$j++;
}
}
return ($m1 + $m2) / 2;
}
// Driver Code
$ar1 = array(1, 12, 15, 26, 38);
$ar2 = array(2, 13, 17, 30, 45);
$n1 = sizeof($ar1);
$n2 = sizeof($ar2);
if ($n1 == $n2)
echo("Median is " .
getMedian($ar1, $ar2, $n1));
else
echo("Doesn't work for arrays".
"of unequal size");
// This code is contributed by Ajit.
?>
Time Complexity: O(n)
Auxiliary Space: O(1)
PHP Program for Median of two sorted arrays of same size (By comparing the medians of two arrays):
Step-by-step approach:
- Merge the two input arrays ar1[] and ar2[].
- Sort ar1[] and ar2[] respectively.
- The median will be the last element of ar1[] + the first
- element of ar2[] divided by 2. [(ar1[n-1] + ar2[0])/2].
Below is the implementation of the above approach:
PHP
<?php
function getMedian($ar1, $ar2, $n) {
$j = 0;
$i = $n - 1;
while ($ar1[$i] > $ar2[$j] && $j < $n && $i > -1) {
$temp = $ar1[$i];
$ar1[$i] = $ar2[$j];
$ar2[$j] = $temp;
$j++;
$i--;
}
sort($ar1);
sort($ar2);
return ($ar1[$n - 1] + $ar2[0]) / 2;
}
$ar1 = array(1, 12, 15, 26, 38);
$ar2 = array(2, 13, 17, 30, 45);
$n1 = count($ar1);
$n2 = count($ar2);
if ($n1 == $n2) {
echo "Median is " . getMedian($ar1, $ar2, $n1);
} else {
echo "Doesn't work for arrays of unequal size";
}
?>
Time Complexity: O(nlogn)
Auxiliary Space: O(1)
PHP Program for Median of two sorted arrays of same size using Binary Search:
Step-by-step approach:
We can find the kth element by using binary search on whole range of constraints of elements.
- Initialize ans = 0.0
- Initialize low = -10^9, high = 10^9 and pos = n
- Run a loop while(low <= high):
- Calculate mid = (low + (high – low)>>1)
- Find total elements less or equal to mid in the given arrays
- If the count is less or equal to pos
- Update low = mid + 1
- Else high = mid – 1
- Store low in ans, i.e., ans = low.
- Again follow step3 with pos as n – 1
- Return (sum + low * 1.0)/2
- Median of two sorted arrays of same size
Below is the implementation of the above approach:
PHP
<?php
function getMedian($arr1, $arr2, $n) {
$low = (int)-1e9;
$high = (int)1e9;
$pos = $n;
$ans = 0.0;
// Binary search to find the element which will be
// present at pos = totalLen/2 after merging two
// arrays in sorted order
while ($low <= $high) {
$mid = $low + (($high - $low) >> 1);
// Total number of elements in arrays which are
// less than mid
$ub = count(array_filter($arr1, function($x) use ($mid) { return $x <= $mid; })) +
count(array_filter($arr2, function($x) use ($mid) { return $x <= $mid; }));
if ($ub <= $pos) {
$low = $mid + 1;
} else {
$high = $mid - 1;
}
}
$ans = $low;
// As there are even numbers of elements, we will
// also have to find the element at pos = totalLen/2 - 1
$pos--;
$low = (int)-1e9;
$high = (int)1e9;
while ($low <= $high) {
$mid = $low + (($high - $low) >> 1);
$ub = count(array_filter($arr1, function($x) use ($mid) { return $x <= $mid; })) +
count(array_filter($arr2, function($x) use ($mid) { return $x <= $mid; }));
if ($ub <= $pos) {
$low = $mid + 1;
} else {
$high = $mid - 1;
}
}
// Average of two elements in case of even
// number of elements
$ans = ($ans + $low) / 2;
return $ans;
}
$arr1 = array(1, 4, 5, 6, 10);
$arr2 = array(2, 3, 4, 5, 7);
$n = count($arr1);
$median = getMedian($arr1, $arr2, $n);
echo "Median is " . $median . PHP_EOL;
?>
Time Complexity: O(log n)
Auxiliary Space: O(1)
Please refer complete article on Median of two sorted arrays of same size for more details!
Similar Reads
PHP Program To Find Mean and Median of an Unsorted Array Given an unsorted array, the task is to find the mean (average) and median of the array in PHP. we will see the approach and code example to solve this problem. ApproachTo find the mean of an array, we need to sum up all the elements in the array and then divide the sum by the total number of elemen
2 min read
PHP program to find the Standard Deviation of an array Given an array of elements. We need to find the Standard Deviation of the elements of the array in PHP. Examples: Input : array(2, 3, 5, 6, 7)Output : 1.5620499351813Input : array(1, 2, 3, 4, 5)Output : 1 The following problem can be solved using the PHP inbuilt functions. The inbuilt functions used
2 min read
PHP program to find the maximum and the minimum in array Finding the maximum and minimum in an array involves determining the largest and smallest values within a given set of numbers. This task is crucial for analyzing data, identifying trends, or filtering outliers. Various methods, from simple traversal to optimized algorithms, can achieve this.Example
7 min read
PHP Find Union & Intersection of Two Unsorted Arrays Given two unsorted arrays, i.e. arr1, and arr2, the task is to find the union and intersection of two unsorted arrays in PHP. Union and intersection of two arrays are common operations in data manipulation and analysis. The union of two arrays includes all the unique elements from both arrays, while
3 min read
PHP Program for Merge Sort Merge sort is a popular sorting algorithm that employs a divide-and-conquer approach to sort an array in PHP. It divides the array into smaller subarrays, sorts each subarray, and then merges the sorted subarrays back together to form the final sorted array. How Does Merge Sort Work?Merge sort is a
3 min read
How to Check an Array is Sorted or Not in PHP? Given an array, the task is to check whether the given array is sorted or not. Arrays are often used to store and manipulate data. One common task is to check if an array is sorted in ascending or descending order. This article will explore different approaches to determine whether an array is sorte
3 min read
How to Find Union and Intersection of Two Unsorted Arrays in PHP? Given two unsorted arrays representing two sets (elements in every array are distinct), find the union and intersection of two arrays in PHP. Example: Input: arr1[] = {7, 1, 5, 2, 3, 6} , arr2[] = {3, 8, 6, 20, 7} Output: Union {1, 2, 3, 5, 6, 7, 8, 20} and Intersection as {3, 6, 7}These are the fol
4 min read
How to Switch the First Element of an Arrays Sub Array in PHP? Given a 2D array where each element is an array itself, your task is to switch the first element of each sub-array with the first element of the last sub-array using PHP.Example:Input: num = [ ['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']];Output: [ ['g', 'b', 'c'], ['d', 'e', 'f'], ['a', 'h', '
2 min read
PHP | Find Intersection of two arrays You are given two arrays of n-elements each. You have to find all the common elements of both elements, without using any loop in php and print the resulting array of common elements. Example: Input : array1[] = {3, 5, 2, 7, 9}, array2[] = {4, 3, 2, 7, 8} Output : array ( [0] => 3, [1] => 2, [
2 min read
PHP Merging two or more arrays using array_merge() The array_merge() function in PHP combines two or more arrays into one. It merges the values from the arrays in the order they are passed. If arrays have duplicate string keys, the latter values overwrite earlier ones, while numerical keys are re-indexed sequentially.Syntaxarray array_merge($array1,
2 min read