parry3d/utils/
median.rs

1use crate::math::Real;
2use na;
3
4/// Computes the median of a set of values.
5#[inline]
6pub fn median(vals: &mut [Real]) -> Real {
7    assert!(
8        !vals.is_empty(),
9        "Cannot compute the median of zero values."
10    );
11
12    vals.sort_by(|a, b| a.partial_cmp(b).unwrap());
13
14    let n = vals.len();
15
16    if n % 2 == 0 {
17        (vals[n / 2 - 1] + vals[n / 2]) / na::convert::<f64, Real>(2.0)
18    } else {
19        vals[n / 2]
20    }
21}