Home  >  Article  >  Backend Development  >  How to find the median of an array in php

How to find the median of an array in php

百草
百草Original
2023-06-12 14:34:451615browse

How to find the median of an array in php: 1. Get the median after sorting, first use the "sort()" function to sort, and then get the middle value; 2. Use the array function to find the median Number of digits, first use the "count()" function to get the length of the array, then use the "array_slice()" function to take out the middle segment from the array, and finally use the "array_sum()" function to calculate the sum, and then divide by the length; 3. Using the "QuickSelect" method, you can find the median without sorting.

How to find the median of an array in php

The operating system of this tutorial: Windows 10 system, PHP8.1.3 version, DELL G3 computer.

There are three ways to find the median of an array in php:

Method 1: Get the median after sorting

This method is relatively simple. You only need to sort the array and then take the middle value. However, this method has an obvious shortcoming, that is, the time complexity of sorting is O(nlogn). When n is large, the speed is relatively slow.

PHP provides a sort() function that can sort the array, and we can use this function to achieve it.

Code example:

function get_median($arr) {
    sort($arr);
    $count = count($arr);
    $middle = floor(($count - 1) / 2);
    if ($count % 2 == 0) {
        $median = ($arr[$middle] + $arr[$middle + 1]) / 2;
    } else {
        $median = $arr[$middle];
    }
    return $median;
}

Method 2: Use array functions to find the median

PHP provides some array functions, we can use them to calculate the middle value of an array. The specific method is to first use the count() function to get the length of the array, then use the array_slice() function to take out the middle segment from the array, and finally use the array_sum() function to sum it up, and then divide it by the length. This method is simpler and faster.

Code example:

function get_median($arr) {
    sort($arr);
    $count = count($arr);
    $middle = floor(($count - 1) / 2);
    $median = ($count % 2 == 0) ?
        (array_sum(array_slice($arr, $middle, 2)) / 2) :
        $arr[$middle];
    return $median;
}

Method 3: Quick selection algorithm

Both of the above two methods require sorting the array, so the time complexity is relatively high high. There is actually a method called QuickSelect that can find the median without sorting. The quick selection algorithm has many similarities with the quick sort algorithm, but it only requires part of the quick sort, so its time complexity is O(n).

Code example:

function get_median($arr) {
    if (count($arr) % 2 == 0) {
        $k = count($arr) / 2;
    } else {
        $k = (count($arr) + 1) / 2;
    }
    return quick_select($arr, $k);
}
function quick_select(&$arr, $k) {
    if (count($arr) == 1) return $arr[0];
    $p = $arr[0];
    $f = $l = array();
    foreach ($arr as $v) {
        if ($v < $p) $f[] = $v;
        elseif ($v > $p) $l[] = $v;
    }
    if ($k <= count($f)) {
        return quick_select($f, $k);
    } elseif ($k > count($arr) - count($l)) {
        return quick_select($l, $k - (count($arr) - count($l)));
    } else {
        return $p;
    }
}

The above are three methods of obtaining the intermediate value of an array. Different methods are suitable for different scenarios. If you need to get multiple intermediate values, you can use a variation of the above method. No matter which method you use, you need to first understand the basic operations of arrays in order to better handle arrays.

The above is the detailed content of How to find the median of an array in php. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn