[C言語]配列の中央値を取得するには?

C言語

どうも、ちょげ(@chogetarou)です。

配列(array)の中央値を取得する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

配列(array)の中央値を取得するには、ソートを使います。

まず、配列を昇順もしくは降順にソートします。

次に、配列の要素数が奇数か偶数かで条件分岐します。

要素数が奇数の場合は、配列の真ん中の要素を取得します。

要素数が偶数の場合は、配列の真ん中の2つの要素の合計値を「2」で割った値を取得します。

//myArray=対象の配列

//配列をソート
int size = sizeof(myArray) / sizeof(myArray[0]);
int x;
for (int i = 0; i < size; ++i) 
{
    for (int j = i + 1; j < size; ++j)
    {
        if (myArray[i] < myArray[j]) 
        {
             x =  myArray[i];
             myArray[i] = myArray[j];
             myArray[j] = x;
         }
    }
}
    
 
//中央値を取得し、変数medianに格納
float median;
if (size % 2 == 0) {
    median =  (myArray[(size - 1) / 2] + myArray[size / 2]) / 2.0;
} else {
    median = myArray[size / 2];
}

上記のコードは、対象の配列の中央値を取得します。

使用例

#include <stdio.h>

float findMedian(int arr[], int n)
{
    int x;
    for (int i = 0; i < n; ++i) 
    {
        for (int j = i + 1; j < n; ++j)
        {
            if (arr[i] < arr[j]) 
            {
                x =  arr[i];
                arr[i] = arr[j];
                arr[j] = x;
            }
        }
    }
    
    if(n % 2 == 0) {
        return (arr[(n - 1) / 2] + arr[n / 2]) / 2.0;
    }
    
    return arr[n / 2];
}


int main(void){
    int myArray[6] = { 10, 2, 5, 7, 9, 1 };
    int size = sizeof(myArray) / sizeof(myArray[0]);
    
    float median = findMedian(myArray, size);
            
    
    printf("%f ", median);
    
    return 0;
}
出力:
6.000000 

コメント

タイトルとURLをコピーしました