急,高手帮忙看下,归并排序

来源:百度知道 编辑:UC知道 时间:2024/06/29 03:12:23
这个程序可以运行,但最后一个函数有些不明白
#include<stdio.h>
#include<stdlib.h>
void merge(int *,int*,int,int,int);
void mergesort(int *,int);

main()
{
int n,*a,i;

printf("输入待排序数字的个数:\n");
scanf("%d",&n);

a=(int*)malloc((n+1)*sizeof(int));
printf("这些数字是:\n");
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
mergesort(a,n);
for(i=1;i<=n;i++)
printf("%d\t",a[i]);
printf("\n");
system("pause");
return 0;
}

void merge(int *a,int *rf,int first,int middle,int last)
{
int i,j,k,t;

for(i=first,j=middle,k=first; i<middle && j<=last ;k++)
{
if(a[i]<a[j])
{
rf[k]=a[i];
i++;
}
else
{
rf[k]=a[j];
j++

if(a!=p)
for(i=1;i<=length;i++)
a[i]=p[i];
如果a和p不相等就执行for语句,然后将a[i]=p[i]; 交换!
——————————————————————
temp=p; |
p=q; |··· 这里P和q进行了交换;
q=temp; |
if(a!=p) ···所以~~~if (a!=p)就进行下面的语句。
for(i=1;i<=length;i++)
a[i]=p[i];

函数 merge(int *,int*,int,int,int);是将传入的数组进行依次排序;
函数 mergesort(int *a,int length);是将长度为length的数组a按照步长len调用函数merge依次归并排序。
如将程序每一步的结果输出,便可清晰的看出:
#include<stdio.h>
#include<stdlib.h>
void merge(int *,int*,int,int,int);
void mergesort(int *,int);

main()
{
int n,*a,i;

printf("输入待排序数字的个数:\n");
scanf("%d",&n);

a=(int*)malloc((n+1)*sizeof(int));
printf("这些数字是:\n");
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
mergesort(a,n);
//for(i=1;i<=n;i++)
// print