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