2017年4月5日 星期三

找中位數 [C++]

在一維的float array1 中,找出中位數 (不包含等於0的數字)
我是另外建立一個同樣大小的array2, 初始值為0。 然後把array1 中的元素由小到大從左到右放入array2 中 再找出中位數。
////code////
float array1[10]={12.3 , 13.5 , 22.6 , 65.4 , 0 , 0 , 0 , 4.4 , 0 , 21};
float array2[10]={0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0};

/// 將 array1 由小排到大放到 array2 中 
int non_O_count=0;
int max_index=-1;
float median_num=0;
for (int i=0; i<10 0="" array1="" array2="" element="" for="" i="" if="" int="" j="" k="" max_index="" non_o_count="">j ; k--) array2[k]=array2[k-1];//較大的element 往右平移
            array2[j]=array1[i];
            max_index++;
            break;
         } 
      }
      if (j > max_index) array2[++max_index]=array1[i];//比現存所有element大,從最右插入
    } 
}

/// 計算中位數 ///
if (non_O_count != 0)
   if (non_O_count%2 != 0)
     median_num=array2[(int)(non_O_count/2.0+0.5)-1];
   else
     median_num=(array2[non_O_count/2-1] + array2[non_O_count/2] ) / 2;

結果如下