Этот код должен показать, сколько раз вызывается функция 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