题解
【入门】求中位数
1 条题解
-
0
解题思路
中位数就是一组数排序后,最中间的那个数。
分两种情况:
- 奇数个:排序后直接取最中间那个,比如 5 个数就取第 3 个
- 偶数个:取最中间两个的平均数,比如 6 个数就取第 3、4 个的平均
步骤:
- 从小到大排序
- 看 n 是奇数还是偶数
- 奇数:答案就是 a[n/2]
- 偶数:答案是 (a[n/2-1] + a[n/2]) / 2.0
举个例子:2 5 8 1 6,排序后 1 2 5 6 8。
- 5 个数是奇数,取第 3 个 → 5
再比如 8 9 1 2 3 0,排序后 0 1 2 3 8 9。
- 6 个数是偶数,取第 3、4 个的平均 = (2+3)/2 = 2.5
注意:偶数个时要除以 2.0(小数),不能除以 2(整数),否则小数部分会丢。
参考代码
#include <iostream> #include <cstdio> using namespace std; int main() { int n, a[100]; cin >> n; for (int i = 0; i < n; i++) cin >> a[i]; // 从小到大排序 for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - 1 - i; j++) { if (a[j] > a[j + 1]) { int t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } // 奇数个取中间,偶数个取中间两个的平均 double ans; if (n % 2 == 1) { ans = a[n / 2]; } else { ans = (a[n / 2 - 1] + a[n / 2]) / 2.0; } printf("%.1f\n", ans); return 0; }复杂度分析
- 时间复杂度:O(N²),冒泡排序
- 空间复杂度:O(N),一个数组存数
- 1