一,我的方法
double median(double arr[],int num)
{
double total = 0;
for(int i=0;i<num;i++)
{
for(int j=0;j<num-i-1;j++)
{
int temp = 0;
if(arr[j]>arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
total = arr[num/2];
return total;
}
思想:对这个数组进行冒泡排序然后找中间的那一个。
二,更好的方法
#include<stdio.h>
void main()
{
int x[] = { 10,11,10,12,9,8,7 };
int number = 7;
int median = 0;
int j = -1;
int count_lower = 0;
int count_higher = 0;
do
{
j++;
count_lower = 0;
count_higher = 0;
for (int i = 0; i < number; i++)
{
if (x[j] <= x[i])count_higher++;
if (x[j] >= x[i])count_lower++;
}
}while (j < number && ((count_lower <= (double)(number)/ 2.)|| (count_higher <= (double)(number) / 2.)));
median = x[j];
printf("中位数是:%d",median);
思想:每一个数与数组的所有数字比较,若是不满足while里面的条件便是中位数,可以提前退出。(为什么这么写的原因,提前退出减少了时间复杂度)。