php中如何求数组的中位数

php中求数组的中位数的方法:1、排序后取中位数,先用“sort()”函数进行排序,再取中间的值;2、利用数组函数求中位数,先使用“count()”函数获取数组的长度,然后使用“array_slice()”函数从数组中取出中间的一段,最后利用“array_sum()”函数求和,再除以长度;3、使用“QuickSelect”方法,可以在不排序的情况下寻找中位数。

本教程操作系统:windows10系统、PHP8.1.3版本、DELL G3电脑。

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

方法一:排序后取中位数

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

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

代码示例:

1

2

3

4

5

6

7

8

9

10

11

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()函数求和,再除以长度即可。这种方法比较简单,速度也比较快。

代码示例:

1

2

3

4

5

6

7

8

9

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;

}

登录后复制

方法三:快速选择算法

以上两种方法都需要对数组排序,所以时间复杂度都比较高。实际上有一个叫做快速选择算法(QuickSelect)的方法,可以在不排序的情况下寻找中位数。快速选择算法与快速排序算法有很多相似之处,但是它只需要快排的一部分,所以其时间复杂度为O(n)。

代码示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

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;

}

}

登录后复制

以上是三种获取数组中间值的方法,不同的方法适用于不同的场景。如果需要获取多个中间值,可以使用以上方法的变体。无论哪种方法,都需要先了解数组的基本操作,才能更好地进行数组处理。

以上就是php中如何求数组的中位数的详细内容,更多请关注php中文网其它相关文章!

TG交流群(点击进入)----付费帮助搭建---修复---二开,以及发布求资源.
QQ交流群 922260178
© 版权声明
THE END
喜欢就支持一下吧
点赞2.3W+ 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容