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); }