这道题没什么难度,主要是考一个中位数的求法,注意分类,偶数和奇数的时候。
求中位数的时候要先排序,排序用快速排序,快速排序这个还是有很多要注意的。
- 分为left和right
- num[right] num[left]和k判断的时候要加等号
- 先要用if判断,后接一个while嵌套两个while。做所有递归的时候都要注意这一点,就是把递归放在条件里,因为不这样做就会一直递归下去,直到爆栈。
#include <stdio.h>
#include <iostream>
#pragma warning(disable:4996);
using namespace std;
const int maxn = 10010;
int n;
int num[maxn];
void quickSort(int left, int right)
{
int r = right;
int l = left;
int k;
if (l < r)
{
k = num[left];
while (l < r)
{
while (l < r && num[r] >= k)
{
r--;
}
num[l] = num[r];
while (l < r && num[l] <= k)
{
l++;
}
num[r] = num[l];
}
num[l] = k;
quickSort(left, l-1);
quickSort(l + 1, right);
}
}
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &num[i]);
}
quickSort(0,n-1);
if (n % 2 != 0)
{
printf("%d", num[n >> 1]);
}
else {
if ((num[n >> 1] + num[(n - 1) >> 1])%2 != 0)
{
printf("%.2f", (num[n >> 1] + num[(n - 1) >> 1]) / 2.0);
}
else
{
printf("%d", (num[n >> 1] + num[(n - 1) >> 1]) / 2);
}
}
}