分治算法求最大子段和问题
int MaxMin(int a[],int left,int right)函数功能是返回数组a的从left到right部分的最大子段和,如果和为负数返回0,数组的每一元素为整数;
写主函数main(),实现输入数组,调用MaxMin()函数,并输出结果功能;C或C++实现
(1)解题思路:这道题要我们用分治算法求最大子段和,最大子段和问题的分治策略是:将整一个序列分为长度相同的两段子序列,然后分成三种情况,第一种情况是max=max_left;第二种情况是max=max_right;前两种情况可以递归求解,第三种情况是左右各有元素,需要分别计算两边,然后合并,即max=s1+s2;
(2)代码如下:
#include <stdio.h>
#include <stdlib.h>
int shuzu(int a[]) {
int i;
int n;
printf("请输入数组个数:\n");
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
return n;
}
int *MaxMin(int a[], int left, int right) {
int center;//中位数
int sum;
int left_max;
int right_max;
int i;
int *index;
int *left_Sub;//情况一的最大子段和
int *right_Sub;