Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 运行分治算法后,从数组打印最大子数组值_C_Arrays_Algorithm_Sub Array - Fatal编程技术网

C 运行分治算法后,从数组打印最大子数组值

C 运行分治算法后,从数组打印最大子数组值,c,arrays,algorithm,sub-array,C,Arrays,Algorithm,Sub Array,我已经实现了一个解决方案,从一个值数组中找到最大子数组。在运行分治算法之前,我可以打印出完整的数组,但在算法运行之后,我似乎无法确定如何打印子数组 int newArray[] = {31, -41, 59, 26, -53, 58, 97, -93, -23, 84}; int arraySize = (sizeof(newArray)/sizeof(int)); printArray(newArray, 0, arraySize - 1); int total = maxSubDiv(

我已经实现了一个解决方案,从一个值数组中找到最大子数组。在运行分治算法之前,我可以打印出完整的数组,但在算法运行之后,我似乎无法确定如何打印子数组

int newArray[] = {31, -41, 59, 26, -53, 58, 97, -93, -23, 84};

int arraySize = (sizeof(newArray)/sizeof(int));

printArray(newArray, 0, arraySize - 1);

int total = maxSubDiv(newArray, 0, arraySize - 1);
这是我的主要函数的一个片段。在找到最大子阵列之前,我使用printArray函数打印整个阵列。maxSubDiv函数如下所示:

int maxSubDiv(int * Array1, int left, int right)
{
    if(left == right)
    {
        return Array1[1];
    }

    int middle = (left + right)/2;

    return findMax(maxSubDiv(Array1, left, middle), maxSubDiv(Array1, middle + 1, right), leftRightCross(Array1, left, middle, right));

}

int leftRightCross(int * Array1, int left, int middle, int right)
{
    int sum = 0;

    int leftSum = INT_MIN;

    for(int i = middle; i >= left; i--)
    {
        sum = sum + Array1[i];
        if(sum > leftSum)
        {
            leftSum = sum;
        }
    }

    sum = 0;
    int rightSum = INT_MIN;

    for(int i = middle + 1; i <= right; i++)
    {
        sum = sum + Array1[i];
        if(sum > rightSum)
        {
            rightSum = sum;
        }
    }

    sum = leftSum + rightSum;

    return sum;
}
maxSubDiv()
中,比较三个子数组的最大值时,返回最大子数组的元组(开始、结束、长度),而不仅仅是长度<代码>“开始”,
“结束”
指定最大子阵列的范围,您可以稍后利用该范围进行打印。您还应该从
leftRightCross()
返回(开始、结束、长度)

例如:


元组可以在C中的
struct
中实现。

我理解这个概念,只是在弄清楚如何实现它时遇到了困难。我在上面发布了更多的代码。
struct tuple{

    int begin;
    int end;
    int length;

};

int findMax(int left, int right, int cross)
{

    int max;
    if(left > right && left > cross)
    {
        max = left;
    }

    else if(right > left && right > cross)
    {
        max = right;
    }

    else
    {
        max = cross;
    }

    return(left, right, cross);
}
// pesudocode
if max is left:
   return (left_begin, left_end, left_length)
if max is right:
   return (right_begin, right_end, right_length)
if max is middle:
   return (middle_begin, middle_end, middle_length)