template <typename T>
double Median(const std::vector<T>& elems) {
THROW_CHECK(!elems.empty());
const size_t mid_idx = elems.size() / 2;
std::vector<T> ordered_elems = elems;
/* std::nth_element 是 C++ 标准库算法中的一个非常有用的函数,它定义在 <algorithm> 头文件中。
该函数主要用于对序列中的元素进行部分排序,以便序列中第 n 个位置的元素处于其最终排序位置,同时保证所有小于它的元素都位于其前面,
所有大于它的元素都位于其后面。但是,它并不保证其他元素的相对顺序。*/
std::nth_element(ordered_elems.begin(),
ordered_elems.begin() + mid_idx,
ordered_elems.end());
if (elems.size() % 2 == 0) {
const T mid_element1 = ordered_elems[mid_idx];
const T mid_element2 = *std::max_element(ordered_elems.begin(),
ordered_elems.begin() + mid_idx);
return 0.5 * mid_element1 + 0.5 * mid_element2;
} else {
return ordered_elems[mid_idx];
}
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交