Распечатайте максимальные значения подмассива из массива после запуска алгоритма «разделяй и властвуй»

Я реализовал решение для поиска максимального подмассива из массива значений. Я могу распечатать весь массив до запуска алгоритма «разделяй и властвуй», но я не могу понять, как распечатать подмассив после запуска алгоритма.

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;
}

Алгоритм, кажется, хорошо протестирован, но у меня просто проблемы с печатью подмассива, содержащего целые числа максимального подмассива. Любая помощь высоко ценится!

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);
}

person Eric Walters    schedule 15.10.2015    source источник


Ответы (1)


В maxSubDiv(), когда вы сравниваете максимум трех подмассивов, возвращайте кортеж (начало, конец, длина) максимального подмассива, а не только длину. "begin", "end" указывает диапазон максимального подмассива, который вы можете использовать позже для печати. Вы также должны вернуться (начало, конец, длина) из leftRightCross().

E.g.,

// 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)

Кортеж может быть реализован в struct на C.

person Eric Z    schedule 15.10.2015
comment
Я понимаю концепцию, мне просто трудно понять, как ее реализовать. Я публикую еще несколько закодированных выше. - person Eric Walters; 15.10.2015