📜  中位数

📅  最后修改于: 2021-04-21 22:49:21             🧑  作者: Mango

中位数是一组数据的中间值。要确定数字序列的中位数,必须首先按升序排列数字。

  • 如果存在奇数个数字,则中位数是中间的数字,上下具有相同数量的数字。
  • 如果列表中的数字数量为偶数,则中位数为两个中间值的平均值。

关于中位数的事实:

  1. 中位数通过均值和众数模式进行组合,以创建称为集中趋势测度的分组。
  2. 中位数是失真数据的一项重要指标(与均值相比),因为中位数不那么容易失真。例如,{1、2、2、5、100)的中位数为2,平均值为22。
  3. 如果用户为每个值添加一个常数,则平均值和中位数会增加相同的常数。
  4. 如果用户将每个值乘以常数,则均值和中位数也将乘以该常数。

未分组数据中位数的公式:

分组数据中位数的公式:

如何找到未排序数组的中位数?

天真的解决方案:
给定n个大小的未排序数组,请找到其中位数。

例子:

Input  : {1, 3, 4, 2, 6, 5, 8, 7}
Output : Median = 4.5

Since number of elements are even, median
is average of 4th and 5th largest elements.
which means (4 + 5)/2 = 4.5

Input  : {4, 4, 4, 4, 4}
Output : Median = 4         

下面是代码实现:

C++
// CPP program to find median
#include 
using namespace std;
  
// Function for calculating median
double findMedian(int a[], int n)
{
    // First we sort the array
    sort(a, a + n);
  
    // check for even case
    if (n % 2 != 0)
        return (double)a[n / 2];
  
    return (double)(a[(n - 1) / 2] + a[n / 2]) / 2.0;
}
  
// Driver program
int main()
{
    int a[] = { 1, 3, 4, 2, 7, 5, 8, 6 };
    int n = sizeof(a) / sizeof(a[0]);
    cout << "Median = " << findMedian(a, n) << endl;
    return 0;
}


Java
// Java program to find median
import java.util.*;
  
class GFG {
  
    // Function for calculating median
    public static double findMedian(int a[], int n)
    {
        // First we sort the array
        Arrays.sort(a);
  
        // check for even case
        if (n % 2 != 0)
            return (double)a[n / 2];
  
        return (double)(a[(n - 1) / 2] + a[n / 2]) / 2.0;
    }
  
    // Driver program
    public static void main(String args[])
    {
        int a[] = { 1, 3, 4, 2, 7, 5, 8, 6 };
        int n = a.length;
        System.out.println("Median = " + findMedian(a, n));
    }
}


Python3
# Python3 program to find median
  
# Function for calculating median
def findMedian(a, n):
  
    # First we sort the array
    sorted(a)
  
    # check for even case
    if n % 2 != 0:
        return float(a[n // 2])
      
    return float((a[int((n-1)/2)] +
                  a[int(n / 2)])/2.0)
  
# Driver program
a = [ 1, 3, 4, 2, 7, 5, 8, 6 ]
n = len(a)
print("Median =", findMedian(a, n))


C#
// C# program to find median
using System;
  
class GFG {
  
    // Function for
    // calculating median
    public static double findMedian(int[] a, int n)
    {
        // First we sort
        // the array
        Array.Sort(a);
  
        // check for
        // even case
        if (n % 2 != 0)
            return (double)a[n / 2];
  
        return (double)(a[(n - 1) / 2] + a[n / 2]) / 2.0;
    }
  
    // Driver Code
    public static void Main()
    {
        int[] a = { 1, 3, 4, 2,
                    7, 5, 8, 6 };
        int n = a.Length;
        Console.Write("Median = " + findMedian(a, n) + "\n");
    }
}


PHP


输出:

Median = 4.5

找到中位数= O(n Log n)的时间复杂度,因为我们需要首先对数组进行排序。请注意,我们可以使用此处和此处讨论的方法找到O(n)时间中的中值。

与中位数有关的基本程序:

  • 最大化数组的中位数
  • 使数组元素相等的最小增量/减量
  • 与数组中元素的最小差异总和
  • 两个大小不同的排序数组的中位数|套装1(线性)
  • O(log(min(n(n,m)))中具有不同大小的两个排序数组的中位数

与中位数有关的更多问题:

  • 使用计数排序的中位数和众数
  • 要添加的最小元素数,以使中位数等于x
  • 将中值字符串解码为原始字符串
  • K个附加整数后的中位数
  • 在按行排序的矩阵中找到中位数
  • 在O(n)时间和O(1)空间中找到BST的中值
  • 中位数为整数流(运行整数)

关于中位数的最新文章!