73 lines
1.7 KiB
Plaintext
73 lines
1.7 KiB
Plaintext
#[derive(Debug)]
|
|
struct FiveNum {
|
|
minimum: f64,
|
|
lower_quartile: f64,
|
|
median: f64,
|
|
upper_quartile: f64,
|
|
maximum: f64,
|
|
}
|
|
|
|
fn median(samples: &[f64]) -> f64 {
|
|
// input is already sorted
|
|
let n = samples.len();
|
|
let m = n / 2;
|
|
if n % 2 == 0 {
|
|
(samples[m] + samples[m - 1]) / 2.0
|
|
} else {
|
|
samples[m]
|
|
}
|
|
}
|
|
|
|
fn fivenum(samples: &[f64]) -> FiveNum {
|
|
let mut xs = samples.to_vec();
|
|
xs.sort_by(|x, y| x.partial_cmp(y).unwrap());
|
|
|
|
let m = xs.len() / 2;
|
|
|
|
FiveNum {
|
|
minimum: xs[0],
|
|
lower_quartile: median(&xs[0..(m + (xs.len() % 2))]),
|
|
median: median(&xs),
|
|
upper_quartile: median(&xs[m..]),
|
|
maximum: xs[xs.len() - 1],
|
|
}
|
|
}
|
|
fn main() {
|
|
let inputs = vec![
|
|
vec![15., 6., 42., 41., 7., 36., 49., 40., 39., 47., 43.],
|
|
vec![36., 40., 7., 39., 41., 15.],
|
|
vec![
|
|
0.14082834,
|
|
0.09748790,
|
|
1.73131507,
|
|
0.87636009,
|
|
-1.95059594,
|
|
0.73438555,
|
|
-0.03035726,
|
|
1.46675970,
|
|
-0.74621349,
|
|
-0.72588772,
|
|
0.63905160,
|
|
0.61501527,
|
|
-0.98983780,
|
|
-1.00447874,
|
|
-0.62759469,
|
|
0.66206163,
|
|
1.04312009,
|
|
-0.10305385,
|
|
0.75775634,
|
|
0.32566578,
|
|
],
|
|
];
|
|
|
|
for input in inputs {
|
|
let result = fivenum(&input);
|
|
println!("Fivenum",);
|
|
println!(" Minumum: {}", result.minimum);
|
|
println!(" Lower quartile: {}", result.lower_quartile);
|
|
println!(" Median: {}", result.median);
|
|
println!(" Upper quartile: {}", result.upper_quartile);
|
|
println!(" Maximum: {}", result.maximum);
|
|
}
|
|
}
|