Медиана – это статистический показатель, который делит упорядоченный набор данных на две равные части.
Проще говоря, если выложить все числа в ряд по порядку от меньшего к большему, медиана будет находиться прямо посередине.
Для нахождения медианы набор данных сначала нужно упорядочить. После упорядочивания процесс нахождения медианы зависит от чётности количества элементов в наборе:
1. **Если количество элементов нечётное**, медианой будет значение, которое находится посередине упорядоченного списка.
2. **Если количество элементов чётное**, медианой будет среднее арифметическое двух значений, которые находятся посередине упорядоченного списка.
### Примеры
**Для нечётного количества элементов** (например, 5, 1, 3):
1. Упорядочим числа: 1, 3, 5.
2. Медиана – это среднее число: **3**.
**Для чётного количества элементов** (например, 3, 4, 1, 2):
1. Упорядочим числа: 1, 2, 3, 4.
2. Взять два средних числа (2 и 3) и вычислить их среднее арифметическое: \( \frac{2 + 3}{2} = 2.5 \).
3. Медиана в этом случае: **2.5**.
### Вычисление медианы в C\#
```csharp
using System;
using System.Linq;
class Program
{
static double FindMedian(int[] numbers)
{
int size = numbers.Length;
var sortedNumbers = numbers.OrderBy(n => n).ToArray();
// Проверка на четность размера массива
if (size % 2 == 0)
{
// Если количество элементов четное, медиана - это среднее двух средних чисел
return (sortedNumbers[size / 2 - 1] + sortedNumbers[size / 2]) / 2.0;
}
else
{
// Если количество элементов нечетное, медиана - это средний элемент
// Если size = 5, то cредним элементом будет индекс 2, потому что массив имеет значения 0, 1, 2, 3, 4 и индекс 2 находится прямо по середине.
return sortedNumbers[size / 2];
}
}
static void Main(string[] args)
{
int[] dataSet1 = { 5, 1, 3 };
int[] dataSet2 = { 3, 4, 1, 2 };
Console.WriteLine(
quot;Медиана dataSet1: {FindMedian(dataSet1)}"); // Выводит 3
Console.WriteLine(quot;Медиана dataSet2: {FindMedian(dataSet2)}"); // Выводит 2.5
}
}
```
В этом примере:
- Используется метод `OrderBy` из LINQ для сортировки массива чисел.
- Для нечётного количества элементов в массиве медиана — это элемент посередине отсортированного массива.
- Для чётного количества элементов медиана рассчитывается как среднее арифметическое двух центральных элементов.
- Эффективность сортировки зависит от используемого алгоритма, но в большинстве случаев LINQ использует алгоритмы, оптимизированные для общего использования, что должно быть достаточно эффективным для многих сценариев. Однако для очень больших наборов данных или критически важных по производительности приложений может потребоваться рассмотрение более специализированных методов сортировки.