寻找一个数组的中位数

来源:互联网 发布:火车头数据采集器 编辑:程序博客网 时间:2024/06/07 07:22

一,我的方法

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里面的条件便是中位数,可以提前退出。(为什么这么写的原因,提前退出减少了时间复杂度)。

原创粉丝点击