#include <algorithm>
#include <iostream>
#include <vector>
double median(std::vector<double> v) {
// Step 1: sort a *copy* of the vector
std::sort(v.begin(), v.end());
size_t n = v.size();
size_t mid = n / 2;
// Step 2: odd or even number of elements
if (n % 2 == 1) {
return v[mid]; // middle element
} else {
return (v[mid - 1] + v[mid]) / 2.0; // average of two middle elements
}
}
int main() {
std::vector<double> data = {3.5, 1.2, 9.8, 4.4, 2.1};
std::cout << "Median: " << median(data) << "\n";
}
/*
run:
Median: 3.5
*/