Написание функции для поиска медианы вектора целых

Я пытаюсь написать вторую функцию для вычисления вектора целых чисел, который находится в основной функции. Мой вектор настроен так.

int inputinfo;
cout << "\nPlease enter in scores: ";
cout << "\nEnd your input with ctrl-z\n";
vector<int> scores;
while (cin >> inputinfo)
{
scores.push_back(inputinfo);
}

Вот мое среднее уравнение (которое, я не уверен, работает правильно). Я хотел бы сделать функцию для медианы, а затем вызвать ее обратно в основную функцию, чтобы найти медиану вектора.

  double median;
size_t size = scores.size();

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

if (size  % TWO == 0)
{
median = (scores[size / 2 - 1] + scores[size / 2]) / 2;
}
else
{
median = scores[size / 2];
}

Спасибо за любую помощь.

1

Решение

Проверьте, не ошибся ли ваш код, если у вас нет ни одного или только одно число в векторе. Вы можете исправить это используя

if (size==0) throw "Vector empty";
if (size==1) return scores[0];

перед строкой if (размер% TWO == 0).

2

Другие решения

Просто для краткого резюме: Медиана означает среднюю запись в отсортированном списке, верно?
Итак, вы ищете

//your array has a even size, so you want the middle of it
if (size  % TWO == 0)
{
median = scores[size / 2 - 1];
}
// your array has a odd size, so you average
else
{
median = (scores[size / 2 - 1] + scores[size / 2]) / 2;
}
0

По вопросам рекламы [email protected]