/*
  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;  // чистая формальность, досюда исполнение никогда не доходит
}
