/* * The following code is public domain. * Algorithm by Torben Mogensen, implementation by N. Devillard. * This code in public domain. */ typedef float elem_type ; elem_type torben(elem_type m[], int n) { int i, less, greater, equal; elem_type min, max, guess, maxltguess, mingtguess; min = max = m[0] ; for (i=1 ; imax) max=m[i]; } while (1) { guess = (min+max)/2; less = 0; greater = 0; equal = 0; maxltguess = min ; mingtguess = max ; for (i=0; imaxltguess) maxltguess = m[i] ; } else if (m[i]>guess) { greater++; if (m[i]greater) max = maxltguess ; else min = mingtguess; } if (less >= (n+1)/2) return maxltguess; else if (less+equal >= (n+1)/2) return guess; else return mingtguess; }