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中文网其它相关文章!
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布投稿,分享有佣金分成!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务 请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长,可领回失去的金币,并额外有奖!
6. 如遇到加密压缩包,默认解压密码为"www.77ym.top",如遇到无法解压的请联系管理员!
7. 本站部分文章、资源来自互联网,版权归原作者及网站所有,如果侵犯了您的权利,请及时联系我站删除。免责声明
暂无评论内容