Exemplo n.º 1
0
void SC_Statistics::CalcMedian(SC_DoubleArray& data)
{
    if (nOK == 0)
        return;

    if (nOK != data.Size())
        {
            data.Cleanup();
            nOK = data.Size();
        }

    // mix before sort to help sort routine
    SC_Random mix;
    mix.RandomMix(data);
    if (!data.Sort(true))
        {
            realResults[soMedian] = nullReal;

        }
    else
        {
            int midPt = data.Size() / 2;
            if ((data.Size() % 2) == 1)
                {
                    // odd entries -- pick middle
                    realResults[soMedian] = data[midPt];
                }
            else
                {
                    // average possibilities
                    realResults[soMedian] = data[midPt];
                    realResults[soMedian] += data[midPt - 1];
                    realResults[soMedian] /= 2.0;
                }
        }
}