三个数组求中位数,并且求最后中位数的中位数-----C++算法实现

文件Median.h
#include <list>
class CMedian
{
public:
    explicit CMedian();
    virtual ~CMedian();
    void getMedian(float& NumberOfMedian);

    std::list<float> array;
};
文件Median.cpp
#include "Median.h"

CMedian::CMedian()
{
}

CMedian::~CMedian()
{
}

void CMedian::getMedian(float& NumberOfMedian)
{
    array.sort();
    int n = array.size();
    std::list<float>::iterator itr = array.begin();
    for(int i = 0;i < n/2; ++i)
        itr++;
    if(0 == n % 2)
    {
        NumberOfMedian = (*itr + *(--itr)) / 2;
    }
    else
    {
        NumberOfMedian = *itr;
    }
}
文件:main.cpp
#include "Median.h"
#include <vector>
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])
{
    float a[4] = {3,1,9,5};
    float b[4] = {8,-1,6,3};
    float c[4] = {1,2,4,0};
    CMedian *array1 = new CMedian();
    CMedian *array2 = new CMedian();
    CMedian *array3 = new CMedian();
    CMedian *sumArray = new CMedian();
    for(int i = 0; i < 4;i++)
    {
        array1->array.push_back(a[i]);
    }
    for(int i = 0; i < 4;i++)
    {
        array2->array.push_back(b[i]);
    }
    for(int i = 0; i < 4;i++)
    {
        array3->array.push_back(c[i]);
    }

    float NumberOfMedian1 = 0;
    float NumberOfMedian2 = 0;
    float NumberOfMedian3 = 0;
    array1->getMedian(NumberOfMedian1);
    array2->getMedian(NumberOfMedian2);
    array3->getMedian(NumberOfMedian3);

    std::cout<<NumberOfMedian1<<std::endl;
    std::cout<<NumberOfMedian2<<std::endl;
    std::cout<<NumberOfMedian3<<std::endl;

    sumArray->array.push_back(NumberOfMedian1);
    sumArray->array.push_back(NumberOfMedian2);
    sumArray->array.push_back(NumberOfMedian3);

    float finalMedian = 0;
    sumArray->getMedian(finalMedian);
    std::cout<<finalMedian<<std::endl;
    std::cin>>finalMedian;
    return 0;
}

实际图

sshot-6

原文地址:https://www.cnblogs.com/chunge2050/p/3164059.html