C++ 最大子阵列程序实现未终止
我正在尝试使用分治技术实现在数组中查找最大子数组和的算法,但由于某种原因,程序没有终止,我自己也没有成功地调试它。有人能告诉我问题出在哪里吗C++ 最大子阵列程序实现未终止,c++,algorithm,C++,Algorithm,我正在尝试使用分治技术实现在数组中查找最大子数组和的算法,但由于某种原因,程序没有终止,我自己也没有成功地调试它。有人能告诉我问题出在哪里吗 #include <iostream> #include <cmath> using namespace std; int max_sub_arr(int arr[], int beginning, int end); int helper_sub_arr(int arr[], int left, int center, int r
#include <iostream>
#include <cmath>
using namespace std;
int max_sub_arr(int arr[], int beginning, int end);
int helper_sub_arr(int arr[], int left, int center, int right);
int a[15] = {5, -2, 5, -6, 8, 20, -15, 4, 5, 3, -1, -2 , -5, 10, 1};
int length = 15;
int main()
{
cout <<max_sub_arr(a, 0, length-1) << endl;
return 0;
}
int max_sub_arr(int arr[], int beginning, int end)
{
if(beginning == end) return arr[beginning];
int center = (end - beginning)/2;
int left = max_sub_arr(arr, beginning, center);
int right = max_sub_arr(arr, center+1,end);
int cross = helper_sub_arr(arr, left, center, right);
if(left >= right && left >= cross) return left;
else if(right >= left && right >= cross) return right;
else return cross;
}
int helper_sub_arr(int arr[], int left, int center, int right)
{
cout<<"as";
int leftsum = -pow(2, 31);
int rightsum = -pow(2, 31);
int sum = 0;
int maxleft, maxright;
for(int i = center; i >= 0; --i)
{
sum += arr[i];
if(sum > leftsum)
{
leftsum = sum;
maxleft = i;
}
}
sum = 0;
for(int i = center + 1; i <= right; ++i)
{
sum += arr[i];
if(sum > rightsum)
{
sum = rightsum;
maxright = i;
}
}
return maxleft + maxright;
}
#包括
#包括
使用名称空间std;
int max_sub_arr(int arr[],int开始,int结束);
int helper_sub_arr(int arr[],int left,int center,int right);
inta[15]={5,-2,5,-6,8,20,-15,4,5,3,-1,-2,-5,10,1};
整数长度=15;
int main()
{
cout=左和右>=交叉)返回右;
否则返回十字;
}
int-helper_-sub_-arr(int-arr[],int-left,int-center,int-right)
{
cout leftsum)
{
左和=和;
maxleft=i;
}
}
总和=0;
对于(int i=中心+1;i右和)
{
sum=rightsum;
maxright=i;
}
}
返回maxleft+maxright;
}
Changeintcenter=(结束-开始)/2代码>到int center=(结束+开始)/2代码>
运行后,由于right
变量的值为72564,所以在50行处出现分段错误
请阅读此内容。谢谢您的更正,但它不会终止。