Так что это мой код для сортировки слияния. Но мне нужно выяснить, сколько раз были сделаны сравнения во время функции слияния. Для моего кода вывод count будет равен 0. Как мне изменить код, чтобы заставить счетчик работать?Подсчет количества сравнений для сортировки слияния
#include<stdio.h>
#include<stdlib.h>
void merge(int *array,int low, int mid, int high,int count)
{
int i=low, j=mid+1, n=low, f[high+1];
while((i<=mid)&&(j<=high)) {
if(array[i]>array[j]){
f[n]=array[j];
j++;
}else{
f[n]=array[i];
i++;
}
n++;
count++;
}
if(i>mid)
while(n<=high) {
f[n]=array[j];
n++;
j++;
}
if(j>mid)
while(n<=high) {
f[n]=array[i];
n++;
i++;
}
for(n=low;n<=high;n++)
array[n]=f[n];
}
void mergesort(int *array, int low, int high,int count)
{
int mid;
if(low<high){
mid=(high+low)/2;
mergesort(array,low,mid,count);
mergesort(array,mid+1,high,count);
merge(array, low, mid, high,count);
}
}
int main()
{
int size,i, count=0, *f;
scanf("%d", &size);
f=(int *)malloc(sizeof(int)*size);
for(i=0;i<size;i++)
scanf("%d", &f[i]);
mergesort(f, 0, size-1,count);
for(i=0;i<size;i++) {
printf("%d",f[i]);
if(i==size-1)
printf("\n");
else
printf(" ");
}
printf("%d\n", count);
return 0;
}
Вместо того чтобы использовать '<' или '<=' и т.д., сделать функцию с именем 'lessThan' и увеличиваем счетчик внутри этой функции. –
Параметры функции в C передаются по значению. Это означает, что изменение значения параметра внутри функции не изменяет исходную переменную, которую передал вызывающий. Таким образом, 'count' должен быть возвращен из вашей функции или передан как указатель. – kaylum
хранить статическую переменную 'counter' и увеличивать ее в функции' mergesort' – piyushj