您的位置:首页 > 其它

求最大子序列算法

2016-03-13 22:02 169 查看
int MaxLeft,MaxRight;

int MaxSubseqsum3 (int A[],int N)

{

int ThisSum=0,MaxSum=0;

int SumLeft=0,SumRight;

int i;

for(i=0;i<N;i++)

{

SumRight=i; //当前子列和右端

ThisSum += A[i]; //向右累加

if(ThisSum>MaxSum)

{

MaxSum=ThisSum; //发现更大和则更新当前结果

MaxLeft=SumLeft;//最大子列和左端

MaxRight=SumRight;//最大子列和右端

}

else if(ThisSum < 0)//如果当前子列和为负

{

ThisSum = 0; //则不可能使后面的部分和增大,抛弃之

SumLeft=i+1; //当前子列和左端

}

}

return MaxSum;

}

可以求出最大子序列

int maxsub(const int a[],int n)

{

    int sum, max, i, j, begin, end;

    begin = end = max = 0;

    for(i = 0;i < n;i++)

    {

        sum = 0;

        for(j = i;j<n;j++)

        {

            sum += a[j];

            printf("the second level loop %d loop sum = %d\n",j,sum);

            printf("the second level loop %d loop max = %d\n",j,max);

            if(sum > max)

            {

                max = sum;

                begin = i;

                end = j;

            }

        }

        printf("the %d loop max = %d\n",i+1,max);

    }

    printf("--final-- Begin = %d, End = %d\n",begin,end);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: