pub fn median(mut values: Vec<u64>) -> u64 {
match values.len() {
0 => 0u64,
1 => values[0],
len if len % 2 == 0 => {
values.sort();
let lower_value = values[(len / 2) - 1];
let upper_value = values[len / 2];
(lower_value + upper_value) / 2
}
len => {
values.sort();
values[len / 2]
}
}
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn get_median() {
assert_eq!(0, median(vec![0u64; 0]));
assert_eq!(9, median(vec![9]));
assert_eq!(0, median(vec![1, 0]));
assert_eq!(1, median(vec![1, 0, 9]));
assert_eq!(5, median(vec![1, 0, 9, 10]));
assert_eq!(5, median(vec![20, 1, 0, 9]));
assert_eq!(5, median(vec![20, 1, 0, 10]));
assert_eq!(6, median(vec![20, 1, 0, 11]));
}
}