C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++でソートされていない配列の平均値と中央値を求めるプログラム

はじめに

ソートされていない配列が与えられたとき、その平均値(平均)中央値を計算するのが課題です。本記事では、C++を使ってこれらの統計量を求める方法を、計算式・アルゴリズム・実装例とともにわかりやすく解説します。

平均値の計算方法

平均値は、データ全体の平均的な大きさを表す基本的な指標です。次の式で求めることができます。

平均値 = (配列の全要素の合計) ÷ (要素の総数)

中央値の計算方法

配列がすでにソートされている場合、中央値は次のように定義されます。

  • 要素数が奇数の場合: 配列の中央に位置する要素がそのまま中央値になります。
  • 要素数が偶数の場合: 中央に位置する2つの要素の平均が中央値になります。

配列がソートされていない場合は、まず配列を昇順にソートしてから、上記のロジックを適用する必要があります。

nが奇数の場合の例

1, 2, 3, 4, 5
中央値 = 3

nが偶数の場合の例

1, 2, 4, 5
中央値 = (2 + 4) / 2 = 3

入出力例1

入力

arr[] = {3,5,2,1,7,8}

出力

Mean is : 4.33333
Median is : 4

入出力例2

入力

arr[] = {1, 3, 4, 2, 6, 5, 8, 7}

出力

Mean is: 4.5
Median is: 4.5

アルゴリズム

開始
ステップ1 → 平均値を計算する関数を宣言
    double mean(int arr[], int size)
        int sum = 0 を宣言
        ループ(int i = 0; i < size; i++)
            sum += arr[i]
        終了
        return (double)sum / (double)size
ステップ2 → 中央値を計算する関数を宣言
    double median(int arr[], int size)
        sort(arr, arr+size) を呼び出して配列をソート
        IF (size % 2 != 0)
            return (double)arr[size/2]
        終了
        return (double)(arr[(size-1)/2] + arr[size/2]) / 2.0
ステップ3 → main() 内での処理
    int arr[] = {3,5,2,1,7,8} を宣言
    int size = sizeof(arr)/sizeof(arr[0]) を宣言
    mean(arr, size) を呼び出し
    median(arr, size) を呼び出し
終了

C++による実装例

#include <bits/stdc++.h>
using namespace std;
//平均値を計算する関数
double mean(int arr[], int size){
    int sum = 0;
    for (int i = 0; i < size; i++)
        sum += arr[i];
    return (double)sum/(double)size;
}
//中央値を計算する関数
double median(int arr[], int size){
    sort(arr, arr+size);
    if (size % 2 != 0)
        return (double)arr[size/2];
    return (double)(arr[(size-1)/2] + arr[size/2])/2.0;
}
int main(){
    int arr[] = {3,5,2,1,7,8};
    int size = sizeof(arr)/sizeof(arr[0]);
    cout << "Mean is : " << mean(arr, size)<<endl;
    cout << "Median is : " << median(arr, size) << endl;
    return 0;
}

実行結果

上記のコードを実行すると、次のような出力が得られます。

Mean is : 4.33333
Median is : 4

ポイントまとめ

  • 平均値の計算はO(n)、中央値の計算はソートが必要なためO(n log n)の計算量になります。
  • 整数同士の除算で小数部分が切り捨てられるのを防ぐため、double型へのキャストが重要です。
  • 要素数が偶数の場合は、中央の2つの要素の平均を取る点に注意しましょう。
  1. C++で平均絶対偏差(MAD)を計算するプログラムの書き方

    自然数の配列が与えられ、その平均絶対偏差(Mean Absolute Deviation:MAD)を計算することが課題です。平均絶対偏差とは、各データ点と平均値の差(偏差)の絶対値を取ったものの平均であり、データのばらつき具合を測るための統計量の一つです。これを求めるためには、平均、分散、標準偏差に関する基礎知識が必要となります。 平均絶対偏差を計算するには、以下の手順に従います。 平均を計算する 絶対偏差を計算する 計算したすべての偏差を合計する 公式を適用する 入力例と出力例 入力 arr[] = { 34,21,56,76,45,11} 出力 mean absolute devi

  2. 配列の全要素を乗算するC++プログラムの解説

    整数型の要素を持つ配列が与えられたとき、配列内のすべての要素を掛け合わせ、その積を表示することを考えます。本記事では、この問題をC++(C言語スタイルのコード)で解く方法を、アプローチ、アルゴリズム、サンプルコード、実行結果まで順を追って解説します。 例 入力: arr[]={1,2,3,4,5,6,7} 出力: 1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040 入力: arr[]={3, 4, 6, 2, 7, 8, 4} 出力: 3 x 4 x 6 x 2 x 7 x 8 x 4 = 32256 解き方のアプローチ この問題は、累積用の一時変数を用意し、配列の要素を先頭