Beispiel #1
0
        public static void Main(string[] args)
        {
            Console.WriteLine("BEGIN 4.1.3");
            int[] inputArray = new int[] { 13, -3, -25, 20, -3, -16, -23, 18, 20, -7, 12, -5, -22, 15, -4, 7 };
            FindMaxSubArrayAlgorithem findMaxArray = new FindMaxSubArrayAlgorithem(inputArray);

            SubArrayProp prop = findMaxArray.FindMaximumSubArray(0, inputArray.Length - 1);

            Console.WriteLine(prop.value);
            for (int i = prop.left; i <= prop.right; i++)
            {
                Console.Write(inputArray[i] + " ");
            }
            Console.WriteLine();
            Console.WriteLine("BEGIN 4.1.5");

            // Test Algorithem for 4.1.5
            FindMaxSubArrayAlgorithem415 findMaxArray415 = new FindMaxSubArrayAlgorithem415(inputArray);
            SubArrayProp prop415 = findMaxArray415.FindMaximumSubArray();

            Console.WriteLine(prop415.value);
            for (int i = prop415.left; i <= prop415.right; i++)
            {
                Console.Write(inputArray[i] + " ");
            }
        }
        public SubArrayProp FindMaximumSubArray(int low, int high)
        {
            if (low == high)
            {
                return(new SubArrayProp {
                    left = low, right = low, value = this.inputArray[low]
                });
            }

            int          mid             = (low + high) / 2;
            SubArrayProp leftArrayProps  = FindMaximumSubArray(low, mid);
            SubArrayProp rightArrayProp  = FindMaximumSubArray(mid + 1, high);
            SubArrayProp crossArrayProps = FindMaxCrosssingSubArray(low, mid, high);

            return(FindMaxCrossingSubArray(leftArrayProps, rightArrayProp, crossArrayProps));
        }
        public static SubArrayProp FindMaxCrossingSubArray(params SubArrayProp[] subArrayProps)
        {
            if (subArrayProps == null ||
                subArrayProps.Count() == 0)
            {
                return(null);
            }
            int          maxValue     = int.MinValue;
            SubArrayProp maxArrayProp = subArrayProps[0];

            foreach (SubArrayProp prop in subArrayProps)
            {
                if (prop.value > maxValue)
                {
                    maxValue     = prop.value;
                    maxArrayProp = prop;
                }
            }
            return(maxArrayProp);
        }