计算 JavaScript 中的中位数

2025年3月2日 | 阅读 10 分钟

给定数据集或信息的中值称为中位数。中位数对于通过数组的偶数和奇数集合获取中间值很重要。我们可以使用多种方法在 JavaScript 中查找数组的中位数。

中位数数组的问题

如果使用奇数值集的数组,我们将使用中间元素并将该值作为输出。例如,数据库中的数组是 [1,2,3,4,5]。3 是数组集合的中位数。

针对特定问题的推理

  • 我们将在代码中编写一个方法来确定数组的中位数。
  • 此外,数组的中间索引是通过将其元素长度除以二来确定的。
  • 如果数组中的元素数量为奇数,则该索引就是数组的中位数索引。
  • 如果数组包含偶数个元素集,则中位数的索引将设置为中位数的左侧。
  • 接下来,我们使用 sort() 方法接受一个比较函数作为输入。sort 方法按升序对值进行排序。
  • 如果数组的长度是偶数,则元素返回两个中间值的平均值。
  • 将索引中心的两个值相加,然后将总和除以二。
  • 如果数组的长度是奇数,我们将返回中间值。

方法 1

基本方法是对数组进行排序,如果数组长度为偶数,则将中间值显示为中位数。如果数组长度为奇数,则将两个中间值的平均值显示为中位数。

JavaScript 中位数算法

使用以下步骤获取数组的中位数。

  • 首先,对数组进行排序。
  • 接下来,确定数组的元素计数是偶数还是奇数。
  • 如果数组长度为奇数,则返回数组的中间值。
  • 如果数组长度为偶数,则中位数是两个中间数字的平均值。

示例

以下示例显示了排序、未排序、奇偶数组和哈希值的平均值或中位数。

示例 1

以下示例显示了偶数和未排序数组的中位数。

输出

输出通过函数显示中位数。

Calculate the Median value in JavaScript

示例 2

以下示例显示了奇数和未排序数组的中位数。

输出

输出通过函数显示中位数。

Calculate the Median value in JavaScript

示例 3

以下示例显示了偶数和已排序数组的中位数。

输出

输出通过函数显示中位数。

Calculate the Median value in JavaScript

示例 4

以下示例显示了多索引数组的中位数。我们可以对多个子数组进行排序,创建一个单个数组,然后计算数组的中位数。

输出

输出通过函数显示中位数。

Calculate the Median value in JavaScript

方法 2

首先,我们创建变量 middle,其值为奇数或偶数长度数组的中间值。我们通过防止突变来对数组进行排序。突变是为对象赋予新名称或将其传递给已发生突变的对象的过程。

该方法使用数据类型的对象和数组引用。如果数组的大小是偶数,则两个值在位置 arr((arr.length)/2) + arr(((arr.length)/2) +1) 处可用。接下来,通过使用这两个整数值的平均值来找到中位数。

示例

以下示例显示了排序、未排序、奇偶数组和哈希值的平均值或中位数。

示例 1

以下示例显示了偶数长度数组的中位数。

输出

输出通过函数显示中位数。

Calculate the Median value in JavaScript

示例 2

以下示例显示了奇数长度数组的中位数。

输出

输出通过函数显示中位数。

Calculate the Median value in JavaScript

示例 3

以下示例显示了多索引数组的中位数。

输出

输出通过函数显示中位数。

Calculate the Median value in JavaScript

方法 3

在这种情况下,使用了数组切片和 Math 库。此方法首先按升序对数组进行排序。接下来,我们可以确定数组的长度是奇数还是偶数。如果是偶数,则取中间两个因子的平均值。如果是奇数,则直接返回中间元素。

示例

以下示例显示了排序、未排序、奇偶数组和哈希值的平均值或中位数。

示例 1

以下示例描述了具有奇数和偶数长度的数组的中位数计算。

输出

输出通过函数显示中位数。

Calculate the Median value in JavaScript

示例 2

以下示例描述了具有奇数和偶数多索引数组的中位数计算。我们可以使用具有不同元素大小的多索引数组。

输出

输出通过函数显示中位数。

Calculate the Median value in JavaScript

复杂度

  • 该函数执行需要 O(n log n) 的时间,因为我们选择了一种快速排序技术,并且排序元素需要 O(n log n) 时间(其中 n 是数组的大小)。
  • 此外,该函数使用 O(1) 空间,因为结果仅存储为数组的中间元素。

总结

开发的代码使得查找数组的中位数变得简单而有效。构建的函数执行需要 O(n log n) 的时间。在某些数组已预排序的情况下,由于过程的线性性质,时间复杂度将为 O(n)。