三个数组求中位数,并且求最后中位数的中位数-----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

你可能感兴趣的:(C++)