问答题
下列程序是归并排序的递归算法。【北京交通大学2006七、1(6分)】
#define maxsize 1000
#define 13.13.10
#include
int r[rm+1],r2[rm+1];//r[0]闲置
int a[10]={17,1,23,77,51,1_3,3 9,11,19,1 5);
void merge(int r[], int low, int m, int high, int r2[] )
{int i, j,k; k:i;10w; j=m+1;
while(i<=m&&j<=high)
{if(r[i]<=r[j])
{r2[k]=r[i];i++;)
elSe
{r2[k]=r[j];j++;)
(1) ;
}
if(i>m)
while(j<=high)
{r2[k]=r[j];j++;k++;}
else
while(i<=m)
{r2[k]=r[i]; i++;k++j}
}
void mergesort(int r[], int r1[], int:low, int high)
{int:m,r2 Inn+1];
if(low==high)
r1[low]=r[1 ow];
el8e
{ (2) ;
mergesort(r,r2,low,m);
mergesort( (3) );
merge(2:2,low,m,high,r1);
}
}
main()
{int i;
for(i=0;i<=9;i++)
r[i+1];a[i];
mergesort(r,r2,1,3.0);
for(i=1;i<=10;i++)
print:f(“ %d”,r2[i]);
printf(“\n”);
}
【正确答案】正确答案:(1)k++ (2)m=(low+high)/2 (3)r,r2,m+1,high
【答案解析】