summaryrefslogtreecommitdiff
path: root/CPP/cpp_book/chap3/median.cpp
blob: e9932e8131d21b806135532222b2826a61f6768f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <vector>
#include <algorithm>
#include <stdexcept>

double median(std::vector<double> vec)
{
	std::vector<double>::size_type mid, size;

	size = vec.size();

	if (size == 0)
		throw std::domain_error("median of an empty vector");

	sort(vec.begin(), vec.end());

	mid = size / 2;

	return size % 2 == 0 ? (vec[mid] + vec[mid - 1]) / 2
			     : vec[mid];

}