1. 程式人生 > >3664-順序表應用7:最大子段和之分治遞迴法-C語言

3664-順序表應用7:最大子段和之分治遞迴法-C語言

這裡寫圖片描述


#include <stdio.h>
#include <stdlib.h>

int count=0;
//定義全域性變數用來記錄遞迴次數
typedef struct{
    int data[50010];
    int length;
}List;

int Create(List *L){
    int i;
    for(i=0;i<L->length;i++){
        scanf("%d",&L->data[i]);
    }
}

int max(int a,int b){
    if(a>b)return
a; else return b; } //C語言中的max函式需要自己補充 int Maxsum(List *L,int l,int r){ int sum=0; if(l==r){ if(L->data[l]>0) sum=L->data[l]; else sum=0; } else { int mid=(l+r)/2; int leftsum; leftsum=Maxsum(L,l,mid); int rightsum; rightsum=Maxsum(L,mid+1
,r); int i,Maxhe=0,he=0; for(i=l;i<=r;i++){ he+=L->data[i]; if(he<0)he=0; if(he>Maxhe)Maxhe=he; } sum=Maxhe; sum=max(sum,leftsum); sum=max(sum,rightsum); } count++; return sum; } int main() { List *L=(List *)malloc(sizeof(List)); scanf("%d"
,&L->length); Create(L); int Max_sum; Max_sum=Maxsum(L,0,L->length-1); printf("%d %d",Max_sum,count); return 0; }