参考:http://wenku.baidu.com/link?url=9f_-NmepWw2DoZaj01FHw3udtlS7Pa6fSI-mie-yU1BE8ZLjxgduVPj7B2u-Rfwfbn9eiHuPcp1ggiIccAcN9aLyWmLd3uOux7HbIMc92NG
求解连续子数组的最大值,基本和参考文献一样,本文只是记录了连续子数组的上下界,原文记录上下界方式有误!
更改主要在如下三点:
1、最大值出现在单点上或者连续的几点上,所以在递归算法的收敛位置记录下标值且更新最大值为当前最大值
2、单点出现在分治算法的叶子节点即FIND_MAXIMUM_SUBARRAY的收敛点,连续点出现在分治算法树的父节点即FIND_MAX_CROSSING_SUBARRAY的最值点
3、对于1、2都必须同时更新最大值和最大连续子数组的上下界
#include <iostream>
using namespace std;
#define INF -1000 //定义一个很小的值代表于负无穷
int FIND_MAX_CROSSING_SUBARRAY(int *q,int low,int mid,int high);
int FIND_MAXIMUM_SUBARRAY(int *p,int low,int high);
int pos_low,pos_high,val; //定义全局变量存放起始位置以及满足FIND_MAX_CROSSING_SUBARRAY的和最大值
int max_sum = INF;//
//分治法排序
int main()
{
int A[]={-1,-2,45,-3,1};
int *a = A;
cout<<*(a)<<endl;