急,高手帮忙看下,归并排序
来源:百度知道 编辑: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