PHP 程序求两个相同大小排序数组的中值

phpserver side programmingprogramming更新于 2025/8/29 10:07:17

PHP(超文本预处理器)是一种流行的 Web 开发脚本语言。它被广泛用于创建动态交互式网页。PHP 代码可以直接嵌入到 HTML 中,允许开发人员无缝地混合使用 PHP 和 HTML。PHP 可以连接数据库、处理表单数据、生成动态内容、处理文件上传、与服务器交互以及执行各种服务器端任务。

PHP 支持各种 Web 开发框架,例如 Laravel、Symfony 和 CodeIgniter,它们为构建 Web 应用程序提供了额外的工具和功能。PHP 是一种开源语言,拥有庞大的社区、丰富的文档以及丰富的库和扩展生态系统。

PHP 程序求两个相同大小排序数组的中值

中值是区分数据集上半部分和下半部分的值。要计算数组的中位数,需要考虑已排序数组的中间元素。

示例

<?php
// 基于简单合并的 O(n) 解决方案
// 查找两个已排序数组的中位数

// 此函数返回 ar1[] 和 ar2[] 的中位数。此函数的假设如下:ar1[] 和 ar2[] 均为已排序数组,且均包含 n 个元素。
function getMedian($ar1, $ar2, $n)
{
    // i/p 数组 ar1[] 的当前索引
    $i = 0;
    
    // i/p 数组 ar2[] 的当前索引
    $j = 0;
    $count;
    $m1 = -1; $m2 = -1;
    
    // 由于有 2n 个元素,
    // 中位数将是数组中索引 n-1 和 n 处元素的平均值
    // 合并 ar1 和 ar2 后获得
	for ($count = 0; $count <= $n; $count++)
	{
        // 以下是处理以下情况:
        // ar1[] 的所有元素都小于
        // ar2[] 的最小元素(或第一个元素)
		if ($i == $n)
		{
			$m1 = $m2;
			$m2 = $ar2[0];
			break;
		}

        // 以下处理所有
        // ar2[] 元素小于
        // ar1[] 最小(或第一个)元素的情况
		else if ($j == $n)
		{
			$m1 = $m2;
			$m2 = $ar1[0];
			break;
		}

		if ($ar1[$i] < $ar2[$j])
		{
			// 存储前一个中位数
			$m1 = $m2;
			$m2 = $ar1[$i];
			$i++;
		}
		else
		{
			// 存储前一个中位数
			$m1 = $m2;
			$m2 = $ar2[$j];
			$j++;
		}
	}

	return ($m1 + $m2) / 2;
}

// 驱动代码
$ar1 = array(1, 3, 5, 7, 9, 11);
$ar2 = array(12, 10 ,8 ,6 ,4, 2);

$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");

?>

输出

它将产生以下输出:

Median is 11.5

代码说明

提供的代码实现了一个简单的基于合并的解决方案,用于查找两个大小相同的已排序数组 $ar1 和 $ar2 的中位数。getMedian 函数将两个输入数组和大小 n 作为参数。它初始化变量以跟踪当前索引、计数器和先前的中位数。它将 count 从 0 迭代到 n,比较两个数组中的元素。它根据比较结果相应地更新先前和当前的中位数。

该函数处理一个数组的元素小于另一个数组元素的情况。最后,它通过对先前和当前的中位数求平均值来返回计算出的中位数。在提供的示例中,驱动程序代码创建了两个数组 $ar1 和 $ar2,并计算它们的大小。它调用 getMedian 函数来查找数组的中位数并打印结果。如果数组大小不相等,则会显示错误消息。

在示例中,$ar1 包含 [1, 3, 5, 7, 9, 11],而 $ar2 包含 [12, 10, 8, 6, 4, 2]。两个数组的长度相同,因此算法可以继续进行。迭代通过比较数组中的元素进行,并相应地更新中位数。最终,中位数计算为 (11 + 12) / 2,得出中位数为 11.5。因此,代码的输出为"Median is 11.5"。

结论

PHP 提供了一种基于合并的方法来查找两个大小相同的已排序数组的中位数。通过合并数组并考虑中间两个元素,程序可以准确地确定中位数。它利用两个索引遍历数组,比较元素并相应地更新中位数变量。

如果数组长度为偶数,则得到的中位数是中间元素的平均值;如果数组长度为奇数,则得到的中位数是中间元素的平均值。这种高效的 O(n) 解决方案提供了一种可靠且直接的方法,用于在 PHP 中计算两个相同大小的排序数组的中位数。


相关文章