【发布时间】:2016-10-02 01:37:00
【问题描述】:
这是我的合并排序代码。但我需要找出在合并功能期间进行了多少次比较。对于我的代码,计数输出为 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需要从函数返回或作为指针传入。 -
保留一个静态变量
counter并在mergesort函数中递增它 -
@kaylum 如何将计数作为指针传递?
-
你也可以让
merge()返回它的计数(从0开始计数),然后在mergesort()中做加法。