/// <summary> /// Fibonacci Search /// </summary> /// <param name="elem"></param> /// <param name="lo"></param> /// <param name="hi"></param> /// <param name="e"></param> /// <returns></returns> private static int FibSearch(T[] elem, int lo, int hi, T e) { Fib fib = new Fib(hi - lo); while (lo < hi) { while (hi - lo < fib.Get()) { fib.Prev(); } int mi = lo + fib.Get() - 1; if (Lt(e, elem[mi])) { hi = mi; } else { if (Lt(elem[mi], e)) { lo = mi + 1; } else { return(mi); } } } return(-1); }