[英]How many times is the function called in this C code?
這段代碼應該顯示當我們有一個范圍從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
您需要查看您的函數isSorted()
。 當要查看三個或更多數據項時,將存在兩個或更多比較。 每次設置flag
,都不會考慮其當前值。 這意味着,如果對它比較的最后兩個項目進行排序, 而與先前的項目是否相同,則isSorted()
函數將返回true
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.