归并排序 帮忙注释一下,主要是用到递归调用的那个函数

2025-06-28 01:04:40
推荐回答(1个)
回答1:

#include
void merge(int a[],int b[],int first,int mid,int last)
{
int i,j,k;
i=first;
j=mid+1;
k=first;
//将中点前的数组和中点后的数组比较(此时a中点前后两数组都已有序)
while((i<=mid)&&(j<=last))
if(a[i]<=a[j]) //将其中的小值往前移,存放在b数组,形成一个有序数组
b[k++]=a[i++];
else
b[k++]=a[j++];
while(i<=mid) //将a数组余下数值复制到b数组中
b[k++]=a[i++];
while(j<=last) //将a数组余下数值复制到b数组中
b[k++]=a[j++];
}
void merge_sort(int a[],int b[],int first,int last)
{
int mid;
int c[10];
if(first==last)
b[first]=a[first]; //只有一个数则递归返回
else
{
mid=(first+last)/2; //求中点值
merge_sort(a,c,first,mid); //将a数组中点前数据排序
merge_sort(a,c,mid+1,last); //将a数组中点后数据排序
merge(c,b,first,mid,last); //将a数组中点前后两数组数据再排序(小值前移)
}
}
void main()
{
int a[10],b[10];
int i;
printf("输入10个数:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
merge_sort(a,b,0,9);
printf("排后:\n");
for(i=0;i<10;i++)
printf("%d\t",b[i]);
}