最大子数组问题
FIND-MAX-CROSSING-SUBARRAY(A,low,mid,high)
//查找跨越中点的最大子数组
left-sum=-∞
sum=0
for i=mid downto low
sum=sum+A[i]
if sum>left-sum //依次向左求和,并与左边所求得最大值比较
left-sum=sum
max-left=i //返回已求得最大数组的左下标
right-sum=-∞
sum=0
for j=mid+1 to high
sum=sum+A[j]
if sum>right-sum
right-sum=sum
max-right=j
return (max-left,max-right,left-sum+right-sum)
使用分治法求最大数组问题
FIND—MAXIMUM-SUBARRAY(A,low,high)
if high=low
return(low,high,A[low]) //仅有一个元素的情况
else mid=⌊(low+high)/2⌋
(left-low,left-high,left-sum)=
FIND-MAXIMUM-SUBARRAY(A,low,mid)
(right-low,right-high,right-sum)=
FIND-MAXIMUM-SUBARRAY(A,mid+1,high)
(cross-low,cross-high,cross-sum)=
FIND-MAX-CROSSING-SUBARRAY(A,low,mid,high)
- if left-sum>=right-sum and left-sum>=cross-sum
return(left-low,left-high,left-sum)
elseif right-sum>=left-sum and right-sum>=cross-sum
return(right-low,right-high,right-sum)
else return(cross-low,cross-high,cross-sum)