В этом разделе представлены два алгоритма поиска медианы пяти чисел. Первый алгоритм делает это применив 6 сравнений. Для простоты изложения считаем все числа разными. Рассмотрим вначале четыре числа. Разобьём их на пары и найдём для каждой пары максимум. При этом мы сделаем два сравнения. Затем найдём общий максимум. Это ещё одно сравнение. Полученный максимум не может быть медианой пяти чисел, т.к. он больше трёх из них. Поэтому отбрасываем это число и рассматриваем оставшуюся четвёрку. Для этих чисел у нас сохранилось одно сравнение. Сравниваем два других, затем полученные максимумы ( 5 сравнений ). Полученный максимум также не может быть медианой пяти чисел, т.к. он больше трёх из них. Поэтому отбрасываем это число и рассматриваем оставшуюся тройку. Для этих чисел у нас сохранилось одно сравнение. Применив ещё одно находим максимум, который и является медианой исходных пяти чисел. Второй алгоритм в худшем случае использует 7 сравнений, а в среднем - меньше 6.
4 - 16 5 - 32 6 - 24 7 - 48 В среднем получается 5.867 сравнений. Эти алгоритмы реализованы в виде шаблонов-функций: template<class T> inline T _median5a ( const T * a ) ... template<class T> inline T _median5b ( const T * a ) ... Исходники находятся в файле median.h. Наверх |