此代码应显示当我们有一个范围从l到r的数组范围时,调用Sort函数的次数。请注意,目标并未显示排序后的数组。因此它使用了mergesort,但我删除了合并步骤,因为目标只是找出调用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;
}
在输入的第一行中有两个数字显示数组中的元素数和用户想要的范围数(使用l和r)。
例如:
输入:
8 2
34 7 11 27 2 35 32 16
1 5
3 7
输出:
5
3
答案 0 :(得分:1)
您需要查看函数isSorted()
。当要查看三个或更多数据项时,将存在两个或更多比较。每次设置flag
时,都不会考虑其当前值。这意味着如果比较的最后两个项目与先前的项目是否排序相同,则isSorted()
函数将返回true
。