c++实现"四分位数"算法1

四分位数Quartile)是统计学分位数的一种,即把所有数值由小到大排列并分成四等份,处于三个分割点位置的得分就是四分位数。

那么下面是四分位数的一种算法:

/ PE3-2-1--写一个程序计算并输出一个整数集的四分位数
// 时间:2012-12-19 10:22:34

//四分位数的如下算法1(见维基百科“四分位数”示例):
// 将n个数从小到大排列:
// 1.利用中位数使数据分成两列(不要把中位数放入已分好的数列)
// 2.第一个四分位数为第一组数列的中位数;
// 3.第三个四分位数为第二组数列的中位数

#include <iostream>
#include <vector>
#include <algorithm>

using std::cin;         using std::endl;
using std::cout;        using std::vector;
using std::sort;        using std::iterator;

int main()
{
    cout << "请输入一个整数集:" << endl;

    short x;
    vector<short>  intsets;

    while (cin >> x)
    {
        intsets.push_back(x);
    }

    // 获取整数集中整数的个数
    typedef vector<short>::size_type vec_sz;
    vec_sz size = intsets.size();

    // 判断整数集是否为空
    if (size <= 3)
    {
        cout << "你输入的整数集小于3,整数集需"
                "大于3,请重新输入!!" << endl;
        return 1;
    }
    // 整数集从小到大排序
    sort(intsets.begin(), intsets.end());

    // 输出排序后的结果
    cout << "排序后的整数集是:" << endl;

    vector<short>::iterator iter;
    for (iter = intsets.begin(); iter != intsets.end(); iter++)
    {
       cout << *iter << ' ';
    }
    cout << endl;

    // 中位数和相应的索引
    vec_sz mid, mid1, mid3;
    double median, median1, median3;

    mid = size / 2;
    // 求得中值
    median = size % 2 == 0 ? (intsets[mid] + intsets[mid-1]) / 2.0
                            : intsets[mid];

    //mid1 = size % 2 == 0 ? (mid-1)/2 : mid/2;
    mid1 = mid / 2;
    mid3 = size%2 == 0  ? (mid + mid1) : (mid+mid1+1);

    median1 = mid % 2 == 0 ? (intsets[mid1] + intsets[mid1-1]) / 2.0
                               : intsets[mid1];
    median3 = mid % 2 == 0 ? (intsets[mid3] + intsets[mid3-1]) / 2.0
                                : intsets[mid3];

    cout << "中分位数为:" << endl;
    cout << "median1 = " << median1 << endl;
    cout << "median2 = " << median << endl;
    cout << "median3 = " << median3 << endl;


    return 0;
}


例如 1
数据总量: 6, 47, 49, 15, 42, 41, 7, 39, 43, 40, 36
由小到大排列的结果: 6, 7, 15, 36, 39, 40, 41, 42, 43, 47, 49

\begin{cases}Q_1  = 15 \\Q_2  = 40 \\Q_3 = 43\end{cases}

例如 2
数据总量: 7, 15, 36, 39, 40, 41

\begin{cases}Q_1 = 15 \\Q_2 = 37.5 \\Q_3 = 40\end{cases}

例如 3
数据总量: 1, 2, 3, 4

\begin{cases}Q_1  = 1.5 \\Q_2  = 2.5 \\Q_3 = 3.5\end{cases}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值