尋找最大子數組算法(C語言實現)

尋找最大子數組算法
C語言實現,下面給出完整代碼:

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

int *FindMaxCrossSubarray(int A[],int low,int mid,int high)  
{  
    int left_sum = -99999;  
    int right_sum = -99999;  
    int sum = 0;  
    int i;  
    int *result;  
    result = (int *)malloc(sizeof(int)*3);  
    for(i = mid;i >= low ;i--)  
    {  
        sum += A[i];  
        if (sum > left_sum)  
        {  
            left_sum = sum;  
            result[0] = i;  
        }  
    }  
    sum = 0;  
    for(i = mid+1;i<=high;i++)  
    {  
        sum += A[i];  
        if(sum > right_sum)
        {  
            right_sum = sum;  
            result[1] = i;  
        }  
    }  
    result[2] = (left_sum+right_sum);  
    return result;  
}  
          
int *FindMaximumSubarray(int A[],int low,int high)  
{  
    int *result;
    int mid;  
    int *result_left,*result_right,*result_cross;  
    result = (int *)malloc(sizeof(int)*3);  
    result_left = (int *)malloc(sizeof(int)*3);  
    result_right = (int *)malloc(sizeof(int)*3);  
    result_cross = (int *)malloc(sizeof(int)*3);  
    if(high == low)  
    {  
        result[0] = low;  
        result[1] = high;  
        result[2] = A[low];  
        return result;  
    }  
    else  
    {  
        mid = (int)((low+high)/2);  
        result_left = FindMaximumSubarray(A,low,mid);  
        result_right = FindMaximumSubarray(A,mid+1,high);  
        result_cross = FindMaxCrossSubarray(A,low,mid,high);  
        if(result_left[2] >= result_right[2]  && result_left[2] >= result_cross[2])  
            return result_left;  
        else if(result_right[2] >= result_left[2] && result_right[2] >= result_cross[2])  
            return result_right;  
        else  
            return result_cross;  
    }  
}  
  
int main(void)  
{  
    int i;  
    int *result;  
    int A[]={-1,2,-3,4,-5,6,-7,8,-9,0};
    result = FindMaximumSubarray(A,0,9);  
    for(i=0;i<3;i++)
    {  
        printf("%d ",result[i]);  
    }  
    printf("\n");  
    return 0;  
}  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章