思路:函数merge为有序双表合并排序,单表排序只需将表分成多个表(sort函数),当表只有一个元素时,视为有序。两两归并,最终得到有序表。
以容量10的整形数组为例
#include<stdio.h>
void merge(int a[],int b[],int c[],int l,int r,int mid) //c为输出数组
{
int i,j,count,z;
i=mid;j=r;count=r;
while(i>=l && j>=mid+1)
{
if(a[i]>b[j])
{
c[count--]=a[i--];
}
else
{
c[count--]=b[j--];
}
}
if(i<l)
{
while(j>=mid+1)
{
c[count--]=b[j--];
}
}
else
{
while(i>=l)
{
c[count--]=a[i--];
}
}
for(z=l;z<=r;z++) //更新相应位置原表数据,每次归并总基于上一次归并的结果
{
a[z]=c[z];
}
}
int sort(int l,int r,int a[],int c[])
{
int mid;
if(l>=r) return ;
mid=(l+r)/2;
sort(l,mid,a,c);
sort(mid+1,r,a,c);
merge(a,a,c,l,r,mid);
}
main()
{
int a[10],i,l=0,r=9,mid,c[10];
mid=(l+r)/2;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
sort(l,r,a,c);
for(i=0;i<10;i++)
{
printf("%d ",c[i]);
}
}