在编程中取中数(中位数)的方法取决于数据的类型和规模。以下是几种常见的方法:
穷举比较法
适用于小规模数据,通过比较所有数据点来确定中位数。
示例代码(C语言):
```c
include int main() { int a, b, c; printf("Input 3 integers... "); scanf("%d %d %d", &a, &b, &c); if (a <= b && b <= c) { printf("Median is: %d ", b); } else if (b <= a && a <= c) { printf("Median is: %d ", a); } else { printf("Median is: %d ", c); } return 0; } ``` 对数据进行排序,然后取中间位置的元素作为中位数。 示例代码(快速排序): ```c include void swap(int *a, int *b) { int t = *a; *a = *b; *b = t; } int partition(int arr[], int low, int high) { int pivot = arr[high]; int i = low - 1; for (int j = low; j <= high - 1; j++) { if (arr[j] < pivot) { i++; swap(&arr[i], &arr[j]); } } swap(&arr[i + 1], &arr[high]); return (i + 1); } void quickSort(int arr[], int low, int high) { if (low < high) { int pi = partition(arr, low, high); quickSort(arr, low, pi - 1); quickSort(arr, pi + 1, high); } } int findMedian(int arr[], int n) { quickSort(arr, 0, n - 1); if (n % 2 == 0) { return (arr[n / 2 - 1] + arr[n / 2]) / 2; } else { return arr[n / 2]; } } int main() { int arr[] = {1, 3, 2}; int n = sizeof(arr) / sizeof(arr); printf("Median is: %d ", findMedian(arr, n)); return 0; } ``` 基于快速排序的思想,通过一次划分找到第K小的元素,对于中位数(第(n+1)/2小的元素)非常高效。 示例代码(快速选择):排序法
快速选择算法