Для чётного количества чисел медианой считается среднее арифметическое двух средних чисел.
7 - 80 8 - 320 9 - 320 В среднем получается 8.333 сравнений. Алгоритм реализован в виде шаблона-функции: template<class T> T _median6 ( const T * a ) { SemiRef<const T> a0(a[0]), a1(a[1]), a2(a[2]), a3(a[3]), a4(a[4]), a5(a[5]); // Упорядочивание первой тройки sort123 ( a0, a1, a2 ); // Упорядочивание второй тройки sort123 ( a3, a4, a5 ); // Отбрасывание крайних чисел и вычисление медианы if ( a1 > a4 ) return ( _max ( a0, a4 ) + _min ( a1, a5 ) ) / 2; else return ( _max ( a1, a3 ) + _min ( a2, a4 ) ) / 2; }Описание шаблона классов SemiRef находится здесь. Исходники находятся в файле median.h. Наверх |