//最大子數組邊界
int[] zdzszbj(int[] a,int low,int mid,int high)
{
int left_Sum = int.MinValue;
int right_Sum = int.MinValue;
int Sum = 0;
int max_left = 0;
int max_right = 0;
for (int i = mid; i >= low; i--)
{
Sum += a[i];
if (Sum>left_Sum)
{
left_Sum = Sum;
max_left = i;
}
}
Sum = 0;
for (int i = mid+1; i <= high; i++)
{
Sum += a[i];
if (Sum > right_Sum)
{
right_Sum = Sum;
max_right = i;
}
}
return new int[] { max_left, max_right, left_Sum + right_Sum };
}
//递归算法-最大子數組
int[] dgsf(int[] a,int low,int high)
{
if (low==high)
{
return new int[] { low, high, a[low] };
}
else
{
int mid = (low + high) / 2;
int[] _left = dgsf(a, low, mid);
int[] _right = dgsf(a, mid+1, high);
int[] _mid = zdzszbj(a, low, mid, high);
if (_left[2]>_right[2] && _left[2]>_mid[2])
{
return _left;
}
else if (_right[2]>_left[2] && _right[2]>_mid[2])
{
return _right;
}
else
{
return _mid;
}
}
}