int cross_low_flag=0,cross_high_flag=0,cross_sum=0;
int low_flag=0,high_flag=0,sum=0;
void find_max_cross_arr(int *arr,int start,int mid,int end)
{
int left_sum=INT_MIN,right_sum=INT_MIN,sum_1=0;
int i;
for(i=mid;i>=start;i--)
{
sum_1= sum_1 + arr[i];
if(sum_1 > left_sum)
{
left_sum=sum_1;
cross_low_flag=i;
}
}
sum_1=0;
for(i=mid+1;i<=end;i++)
{
sum_1= sum_1 + arr[i];
if(sum_1 > right_sum)
{
right_sum=sum_1;
cross_high_flag=i;
}
}
cross_sum= left_sum + right_sum;
}
void find_max_arr(int *arr,int start,int end)
{
int left_low_flag,left_high_flag,right_high_flag,right_low_flag;
int left_sum=0,right_sum=0;
int mid=(start+end)/2;
if(start==end)
{
low_flag=high_flag=start;
sum=arr[end];
}
else
{
find_max_arr(arr, start, mid);
find_max_arr(arr, mid+1, end);
find_max_cross_arr(arr, start, (start + end) / 2, end);
if (left_sum > right_sum && left_sum > cross_sum)
{
low_flag = left_low_flag;
high_flag = left_high_flag;
sum = left_sum;
}
else if (right_sum > left_sum && right_sum > cross_sum)
{
low_flag = right_low_flag;
high_flag = right_high_flag;
sum = right_sum;
}
else
{
low_flag = cross_low_flag;
high_flag = cross_high_flag;
sum = cross_sum;
}
}
}
最大子数组
最新推荐文章于 2024-01-31 18:52:05 发布