剑指offer
题目:数据流中的中位数
描述:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。
代码:
#include <iostream>
#include <string.h>
using namespace std;
class Solution
{
public:
void Insert(int num)
{
m_arr[m_size] = num;
m_size++;
for (int i = 1; i < m_size; i++)
{
int temp = m_arr[i] , k = i;
for(int j = i-1; j >= 0 && m_arr[j] > temp; j--)
{
m_arr[j+1] = m_arr[j];
k = j;
}
m_arr[k] = temp;
}
}
double GetMedian()
{
if (0 == m_size % 2)
{
double Median = m_arr[m_size / 2 -1] / 2.0 + m_arr[m_size / 2] / 2.0;
return Median;
}
else
{
return m_arr[m_size / 2];
}
}
private:
int m_size = 0;
int m_arr[20] = {};
};
int main()
{
Solution A;
int n = 0, n1 = 0, n2 = 0;
cout << "请输入数据流:";
cin >> n >> n1 >> n2;
A.Insert(n);
double dMedian = A.GetMedian();
cout << dMedian << endl;
A.Insert(n1);
double dMedian1 = A.GetMedian();
cout << dMedian1 << endl;
A.Insert(n2);
double dMedian2 = A.GetMedian();
cout << dMedian2 << endl;
}