blob: f05fec0d07c378e1379dbae3f4e18f51180ee7b7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
--- a/rak/algorithm.h 2016-11-04 21:58:44.000000000 +0000
+++ b/rak/algorithm.h 2017-03-10 21:16:32.039264146 +0000
@@ -176,6 +176,26 @@ inline int popcount_wrapper(T t) {
#endif
}
+// Get the median of an unordered set of numbers of arbitrary
+// type by modifing the underlying dataset
+template <typename T = double, typename _InputIter>
+T median(_InputIter __first, _InputIter __last) {
+ T __med;
+
+ unsigned int __size = __last - __first;
+ unsigned int __middle = __size / 2;
+ _InputIter __target1 = __first + __middle;
+ std::nth_element(__first, __target1, __last);
+ __med = *__target1;
+
+ if (__size % 2 == 0) {
+ _InputIter __target2 = std::max_element(__first, __target1);
+ __med = (__med + *__target2) / 2.0;
+ }
+
+ return __med;
+}
+
}
#endif
|