📅  最后修改于: 2023-12-03 14:49:47.001000             🧑  作者: Mango
中位数是一组数据的中间位置的值,即在这组数据中,有一半的数据小于该值,有一半的数据大于该值。在计算机科学中,我们经常需要对实时或流式数据流进行中位数计算。本文将介绍如何使用STL算法来计算运行整数流的中位数。
插入排序是一种简单的排序算法,它可以直接应用于整数流计算中位数。当然,我们可以通过STL实现它。
void insert_sort(vector<int>& seq) {
for (int i = 1; i < seq.size(); i++) {
int temp = seq[i];
int j = i - 1;
while (j >= 0 && seq[j] > temp) {
seq[j + 1] = seq[j];
j--;
}
seq[j + 1] = temp;
}
}
int median(vector<int>& seq) {
insert_sort(seq);
int n = seq.size();
return (n % 2 == 0) ? (seq[n / 2 - 1] + seq[n / 2]) / 2 : seq[n / 2];
}
上述代码使用了insert_sort函数对整数流排序,并计算中位数。
multiset是基于红黑树实现的数据结构,能够自动排序并支持重复元素。因此,它也适用于运行整数流计算中位数。
int median(vector<int>& seq) {
multiset<int> s;
for (int x : seq) {
s.insert(x);
if (s.size() > seq.size() / 2)
s.erase(s.begin());
}
return (*s.begin() + *prev(s.end(), (seq.size() % 2 == 0))) / 2;
}
上述代码使用multiset容器来实现插入和删除,并计算中位数。
本文介绍了两种使用STL来计算运行整数流的中位数的方案。我们可以根据数据集的大小和程序的实时性来选择解决方案。