//归并排序算法
# include<stdio.h>
void Merge(int A[],int p,int q,int r)
{
int n1=q-p+1,n2=r-q,i,k,j;
int r1[10],r2[10];
for(i=0;i<n1;i++)
r1[i]=A[p+i];
for(i=0;i<n2;i++)
r2[i]=A[q+i+1];
r1[n1]=1000,r2[n2]=1000;
for(k=p,i=0,j=0;k<=r;k++)
{
if(r1[i]<=r2[j])
{
A[k]=r1[i];
i++;
}
else
{
A[k]=r2[j];
j++;
}
}
}
void Merge_Sort(int A[],int m,int n)
{
int x=(m+n)/2;
if(m<n)
{
Merge_Sort(A,m,x);
Merge_Sort(A,x+1,n);
Merge(A,m,x,n);
}
}
void main()
{
const int n=10;
int A[n],i;
for(i=0;i<n;i++)
{
scanf("%d",&A[i]);
}
Merge_Sort(A,0,9);
for(i=0;i<n;i++)
printf("%d ",A[i]);
printf("\n");
}
归并排序(使用哨兵元素)
最新推荐文章于 2022-06-27 22:48:58 发布