问题描述
我已经阅读了分而治之方法及其解决问题的效率。查找最大子数组是本书中描述的示例。当我尝试使用C ++语言实现它时,它导致了分段错误错误。
//this is for finding the max sub array if it is in the middle it is correct
Max_Array Find_Crossing_SubArray(int * arr,int low,int hight)
{
int sumLeft = 0,sumRight=0,sumTemp = 0,mid = (low+hight)/2 ;
Max_Array returned = {nullptr,0};
for(int j = mid ; j >= 0 ; j--)
{
sumTemp +=arr[j] ;
if(sumLeft < sumTemp)
{
returned.low = j;
sumLeft = sumTemp ;
}
}
sumTemp = 0;
for(int j = mid+1 ; j < hight ; j++)
{
sumTemp += arr[j] ;
if(sumRight < sumTemp)
{
returned.hight = j ;
sumRight = sumTemp ;
}
}
returned.sum =sumRight + sumLeft;
returned.t = arr + returned.low;
returned.size = returned.hight - returned.low ;
return returned;
}
int mid;
//the function that throws the error+++++++++++
Max_Array Find_Max_SubArray(int* arr,int hight)
{
if(low == hight)
{
Max_Array r = {arr,low,1,arr[low]};
return r;
}
else
{
Max_Array rightArray,leftArray,middleArray;
mid = (low+hight)/2 ;
rightArray = Find_Max_SubArray(arr,mid+1,hight);
leftArray = Find_Max_SubArray(arr,mid);
middleArray = Find_Max_SubArray(arr,hight);
if(rightArray.sum >= leftArray.sum && rightArray.sum >= middleArray.sum)
return rightArray;
else if(leftArray.sum >= rightArray.sum && leftArray.sum >= middleArray.sum)
return leftArray;
else
return middleArray;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)