Esempio n. 1
0
        public void MagicIndexTest()
        {
            int n = 20;

            for (int i = 0; i < 10; i++)
            {
                int[]  data   = new int[n];
                Random random = new Random();

                for (int j = 0; j < data.Length; j++)
                {
                    data[j] = random.Next(-n, n);
                }

                Array.Sort(data);

                int actual = MagicIndexClass.MagicIndex(data);

                if (actual == -1)
                {
                    Assert.IsFalse(MagicIndexTestClass.HasMagicIndex(data, n));
                }
                else
                {
                    Assert.AreEqual(data[actual], actual);
                }
            }
        }
Esempio n. 2
0
        private static int MagicIndex(int[] data, int start, int end)
        {
            if (start > end)
            {
                return(-1);
            }

            int mid = start + (end - start) / 2;

            if (data[mid] == mid)
            {
                return(mid);
            }

            int left = MagicIndexClass.MagicIndex(data, start, Math.Min(mid - 1, data[mid]));

            if (left != -1)
            {
                return(left);
            }

            return(MagicIndexClass.MagicIndex(data, Math.Max(mid + 1, data[mid]), end));
        }
Esempio n. 3
0
 public static int MagicIndex(int[] data)
 {
     return(MagicIndexClass.MagicIndex(data, 0, data.Length - 1));
 }