#include <stdio.h>
#include <conio.h>
int a[100];
int m,n,i,j;
int num,s;
int main()
{
/*1----------------------------------------------*/
/*printf("input m:");
scanf("%d",&m);
printf("input n:");
scanf("%d",&n);
printf("m data:");
for(i=1;i<=m;i++)
scanf("%d",&a[i]);
printf("n data:");
for(i=1;i<=n;i++)
scanf("%d",&a[m+i]);
Hesort(1,m,n+m);
for(i=1;i<=m+n;i++)
printf("%d ",a[i]);
getch();*/
/*1----------------------------------------------*/
/*标号为1的注释行内的语句,用来测试过程体Hesort*/
/*--hesort过程正确--*/
/*2----------------------------------------------*/
printf("input the num of all the data:");
scanf("%d",&s);
printf("input all of the data:");
for(i=1;i<=s;i++)
scanf("%d",&a[i]);
SORT(1,s);
for(i=1;i<=s;i++)
printf("%d ",a[i]);
getch();
/*2----------------------------------------------*/
}
int SORT(int h,int r)/*对数据进行排序*/
{
if(h!=r)
{SORT(h,((r-h)/2)+h);/*前排序*/
SORT((((r-h)/2)+h)+1,r); /*后排序*/
Hesort(h,(h+(r-h)/2),r); /*归并*/
}
}
int Hesort(int h,int mid,int r)/*对有序数列进行归并*/
{int k=h,c[100];
i=h;j=mid+1;
while((i<=mid)&&(j<=r))
{if(a[i]<a[j])
{c[k]=a[i];
k++;
i++;
}
else
{c[k]=a[j];
k++;
j++;
}
}
if(i>mid)
for(i=j;i<=r;i++)
{c[k]=a[i];
k++;
}
if(j>r)
for(j=i;j<=mid;j++)
{c[k]=a[j];
k++;
}
for(i=h;i<=r;i++)
a[i]=c[i];
}
[[it] 本帖最后由 子洋虾米 于 2008-10-4 15:24 编辑 [/it]]