如果用qsort,就毫无技术含量,应该有O(n)算法找中间数。。可惜不会。。暂时先水过去吧
#include<stdio.h>
#include<stdlib.h>
int cmp1(const void *a, const void *b)
{
double *d1 = (double *) a;
double *d2 = (double *) b;
if (*d1 == *d2)
return 0;
else if (*d1 > *d2)
return 1;
else
return -1;
}
int main()
{
int n;
scanf("%d", &n);
while (n--)
{
int m, i;
scanf("%d", &m);
double *array = malloc(m * sizeof(double));
for (i = 0; i < m; i++)
scanf("%lf", array + i);
qsort(array, m, sizeof(double), cmp1);
if (m % 2 == 0)
printf("%.3lf\n", (*(array + m / 2 - 1) + *(array + m / 2)) / 2);
else
printf("%.3lf\n", *(array + m / 2));
free(array);
}
return 0;
}