Сколько раз эта функция вызывается в этом C-коде? - PullRequest
0 голосов
/ 04 ноября 2018

Этот код должен показать, сколько раз вызывается функция Sort, когда у нас есть диапазон массива, начиная с l и заканчивая r. Обратите внимание, что цель не показывает отсортированный массив. Таким образом, он использует сортировку слиянием, но я удалил шаг слияния, потому что цель состоит в том, чтобы просто узнать, сколько раз вызывается функция сортировки. Я не знаю, какая часть кода неправильная и почему я не могу получить правильный ответ.

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

int counter;
bool isSorted (int array[], int l, int r)
{
    bool flag;
    int i;
    int size=l-r+1;
    if (size==0 || size==1)
        flag=true;
    for (i=l; i<r-1 ; i++)
    {
            if (array[i]<array[i+1])
                flag=true;
            else
                flag=false;

    }
    return flag;
}


    void Sort(int A[], int l, int r) {
    // Sorts [l, r)
    if (!isSorted(A, l, r))
    {
        counter=counter+2;
        int mid = (l + r) / 2;
        Sort(A, l, mid);
        Sort(A, mid, r);
    }
}
int main() 
{ 
    int number,length,c,d,k;
    scanf("%d %d", &length, &number);
    int l[number],r[number];
    int a[length];
    for (c = 0; c < length ; c++)
      scanf("%d", &a[c]);
    for (d = 0; d < number ; d++)
      scanf("%d %d", &l[d], &r[d]);
    void TASort(int A[],int l,int r);
    for(k=0; k<number ; k++)
    {
        counter=1;
        Sort(a,l[k],r[k]);
        printf("%d\n", counter);
    }

    return 0; 
}

Два числа в первой строке o input показывают количество элементов в массиве и количество диапазонов, которые хочет пользователь (используя l и r).

Например:

Введите:

8 2 
34 7 11 27 2 35 32 16
1 5
3 7

Выход:

5
3

1 Ответ

0 голосов
/ 04 ноября 2018

Вам нужно взглянуть на свою функцию isSorted(). Когда есть три или более элементов данных для просмотра, будет два или более сравнения. Каждый раз, когда вы устанавливаете flag, вы не учитываете его текущее значение. Это означает, что функция isSorted() вернет true, если два последних сравниваемых элемента были отсортированы независимо от того, были ли предыдущие.

...