//最大子數組邊界
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;
}
}
}