Пример #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);
        }
Пример #2
0
    public void t()
    {
        var fib = new[] { 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233 };

        for (int i = 0; i < fib.Length; ++i)
        {
            Assert.AreEqual(fib[i], Fib.Get(i));
        }
    }