最大子阵列程序实现未终止
Maximal subarray program implementation not terminating
我正在尝试实现使用分而治技术在数组中查找最大子数组总和的算法,但由于某种原因,程序没有终止,我没有设法自己成功调试它。有人可以告诉我问题出在哪里吗?
#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;
}
将int center = (end - beginning)/2;
更改为int center = (end + beginning)/2;
运行后,我在 50 行处出现分段错误,因为变量的值right
72564。
请阅读此 http://www.geeksforgeeks.org/divide-and-conquer-maximum-sum-subarray/。
相关文章:
- 如果没有malloc,链表实现将失败
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 如何在BST的这个简单递归实现中消除警告
- 我收到以下错误:抛出'std::bad_alloc'实例后终止调用
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- 如何正确实现和访问运算符的各种自定义枚举器
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在c++中实现LinkedList时,应出现未处理的错误
- 为左值和右值的包装器实现C++范围
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 使用GSoap实现ONVIF
- 最大子阵列程序实现未终止