这个函数在C代码中被调用了多少次?

这个函数在C代码中被调用了多少次?,c,function,sorting,function-call,C,Function,Sorting,Function Call,这段代码应该显示当我们有一个从l开始到r结束的数组范围时,Sort函数被调用了多少次。请注意,目标没有显示排序的数组。所以它使用了mergesort,但我删除了merge步骤,因为目标只是找出Sort函数被调用了多少次。 我不知道代码的哪一部分是错误的,为什么我不能得到正确的答案 #include <stdlib.h> #include <stdio.h> #include <stdbool.h> int counter; bool isSorted (

这段代码应该显示当我们有一个从l开始到r结束的数组范围时,Sort函数被调用了多少次。请注意,目标没有显示排序的数组。所以它使用了mergesort,但我删除了merge步骤,因为目标只是找出Sort函数被调用了多少次。 我不知道代码的哪一部分是错误的,为什么我不能得到正确的答案

#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; 
}
输出:

5
3

您需要查看函数
isSorted()
。当有三项或三项以上的数据需要查看时,将有两项或两项以上的比较。每次设置
标志
时,都不考虑其当前值。这意味着
isSorted()
函数将返回
true
,如果它所比较的最后两个项目被排序,而不管之前的项目是否被排序。

对于指定的输入,预期的输出是什么?为什么你认为这个程序(目前的情况)是错误的?你有试着去做吗?另外,请阅读,以及.Fyi,
counter=counter+2生成错误的响应。如果有什么,你应该把
++计数器作为排序中的第一行。任何递归调用都会按预期对其进行调整。按原样,您省略了
排序
次数
的初始调用。@Someprogrammerdude我在问题末尾为示例输入编写了预期输出。是的,我试过调试它。
5
3