php中如何求数组的中位数

PhpPhp 2023-08-28 22:09:34 1170
摘要: php中求数组的中位数有三种方法:方法一:排序后取中位数这种方法比较简单,只需要将数组排序,然后取中间的值即可。不过这种方法有一个明显的缺点,就是排序的时间复杂度为O(nlogn),当n很大时,速度比较慢。PHP中提供了一个sort(...

php中求数组的中位数有三种方法:

方法一:排序后取中位数

这种方法比较简单,只需要将数组排序,然后取中间的值即可。不过这种方法有一个明显的缺点,就是排序的时间复杂度为O(nlogn),当n很大时,速度比较慢。

PHP中提供了一个sort()函数,可以对数组进行排序,我们可以利用该函数来实现。

代码示例:

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;
}

方法二:利用数组函数求中位数

PHP中提供了一些数组函数,我们可以用它们来计算数组的中间值。具体方法是,先使用count()函数获取数组的长度,然后使用array_slice()函数从数组中取出中间的一段,最后利用array_sum()函数求和,再除以长度即可。这种方法比较简单,速度也比较快。

代码示例:

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;
}

方法三:快速选择算法