用 JavaScript 计算数组的中位数

javascriptweb developmentobject oriented programming更新于 2024/7/9 17:16:17

在此问题陈述中,我们的任务是借助 Javascript 函数计算数组的中位数。有几种方法可用于解决此任务。计算中位数的一种简单方法是使用 Javascript 的内置函数。

理解问题陈述

问题陈述是在 Javascript 中编写一个函数,该函数将有助于计算给定数组的中位数。例如,如果我们有一个整数数组 [1, 2, 3, 4, 5],那么该数组的中位数是 3。因为 3 是数组的中间元素。

给定问题的逻辑

对于代码,我们将创建一个函数来查找数组的中位数。在函数内部,我们将通过将数组的长度除以 2 来计算数组的中间索引。如果数组的元素数量为奇数,则此索引将是数组中位数的索引。如果数组的数组数量为偶数,则中位数的索引将是中位数的左侧。

然后,我们将使用 sort() 方法按升序对数组进行排序,该方法将比较函数作为参数。如果数组的长度为偶数,则我们将返回两个中间值的平均值。我们将通过将中间索引处的值与中间左侧的索引相加,然后将总和除以 2 来实现此目的。如果数组的长度为奇数,则我们将仅返回中间值。

算法

步骤 1 - 声明一个名为 median 的函数,该函数使用数组参数。

步骤 2 - 通过将数组的长度除以 2 来计算数组的中间值。它将显示中间元素的索引。

步骤 3 - 借助 sort 方法对给定的数组进行排序。

步骤 4 - 如果数组长度为偶数,则返回左侧的中间值。

步骤 5 - 将结果作为数组的中间元素返回。

代码算法

//函数用于查找给定数组的中位数
function median(arr) {
   const mid = Math.floor(arr.length / 2);
   const sortedArr = arr.sort((a, b) => a - b);
 
   if (arr.length % 2 === 0) {
      return (sortedArr[mid - 1] + sortedArr[mid]) / 2;
   } else {
      return sortedArr[mid];
   }
}
const arr = [11, 12, 13, 14, 15, 16, 17, 18, 19];
console.log(median(arr));

复杂度

该函数所花费的时间是 O(n log n ),因为我们使用了执行快速排序的排序方法,而快速排序需要 O(n log n) 的时间来对元素进行排序。其中 n 是给定数组的大小。代码使用的空间是 O(1),因为它将结果仅存储为数组的中间元素。

结论

实现的代码提供了一种简单有效的解决方案来找出给定数组的中位数。创建的函数所花费的时间是 O(n log n)。可能存在给定数组已经排序的情况,因此在这种情况下时间复杂度将为 O(n),因为它需要线性时间。


相关文章


有用资源