// 左子序列为A[low..mid] 右子序列为A[mid+1..high] intFindMaxCrossingSubarraySum(int A[], int low, int mid, int high) { int left_sum = INT_MIN; int sum = 0; for (int i = mid; i >= low; i--) { sum += A[i]; if (sum > left_sum) { left_sum = sum; } } int right_sum = INT_MIN; sum = 0; for (int i = mid+1; i <= high; i++) { sum += A[i]; if (sum > right_sum) { right_sum = sum; } } return (left_sum + right_sum); }
intbrute(int A[], int n) { int max_sum = INT_MIN; for (int i = 0; i < n; i++) { int sum = 0; for (int j = i; j < n; j++) { sum += A[j]; if (sum > max_sum) { max_sum = sum; } } }
intFindMaxSubarraySum(int A[], int n) { int max_sum = INT_MIN; int sum = 0; for (int i = 0; i < n; i++) { sum += A[i]; if (sum > max_sum) { max_sum = sum; } elseif (sum < 0) { sum = 0; } }