Exemple #1
0
        /// <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);
        }