/* http://electronix.ru/forum/index.php?showtopic=114436&view=findpost&p=1180944 Алгоритм основан на последовательной проверке точек массива на их "медианность". Проверка состоит в сравнении точки со всеми остальными - подсчетом двух сумм (s1 и s2) - количества точек, которые оказались больше данной, и количества тех, которые оказались меньше нее. Превышение показания хотя бы одного из счетчиков свыше половины длины массива (slit) бракует данную точку ДОСРОЧНО и переходит к проверке следующей (переход на nexti). До полного перебора всех точек обычно не доходит, т.к. подходящая точка находится раньше (где-то в середине массива), т.е. тоже ДОСРОЧНО. */ datatype median( datatype array, int length) // массив и его длина { int slit = length/2; for( int i=0; i < length; i++) { int s1=0, s2=0; datatype val = array[i]; for( int j=0; j < length; j++) { if( array[j] < val) { if( ++s1 > slit) break; } else if( array[j] > val) { if( ++s2 > slit) break; } } return val; } return 0; // чистая формальность, досюда исполнение никогда не доходит }