对于一个连续的数组a[n],要求连续子数组,使得该子数组的和最大。比如数组{13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7},最大子数组为{18,20,-7,12},和为32。
方法一:穷举法。即将任取数组中的两个元素,算出两者之间(包括这两个元素本身)所有元素之和。穷举所有组合,比较得到最大值。该方法复杂度为n的三次方。
#include <stdio.h>
#include <limits.h>
int sort(int *,int,int);
main()
{
int a[16] = {13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7};
printf("%d\n",sort(a,0,15));
}
int sort(int *a,int low,int high)
{
int i,j,k,sum,max_sum;
max_sum = INT_MIN;
for (i = low;i <= high;i++) {
for (j = low+1;j <= high;j++) {
sum &#