二路归并排序
#include
void in(int *k) {
int i,t;
printf("请输入各个数,一共六个\n");
for(i=0;i<6;i++)
{
scanf("%d",k+i);
}
}
void paixu(int *k) {
int temp,i,j;
for(i=0;i<6;i++)
for(j=i;j<6;j++)
{
if(k[i]>k[j])
{
temp=k[i];
k[i]=k[j];
k[j]=temp;
}
}
}
void fuzhi(int *k,int *t)
{
int i;
for(i=0;i<6;i++)
t[i]=k[i];
}
void xianshi(int *k) {
int i;
for(i=0;i<6;i++)
{
printf("%d ",k[i]);
}
printf("\n");
}
int daxiao(int x,int y,int z)
{
if(x<=y&&x<=z) {printf("%d ",x);return 0;}/**/
if(y<=x&&y<=z) {printf("%d ",y);return 1;}
if(z<=x&&z<=y) {printf("%d ",z);return 2;} }
void guibing(int *sub0,int *sub1,int *sub2,int *cache0,int *cache1,int *cache2)
{
int s1=2,s2=2,s3=2,i,st,r;
for(i=0;i<2;i++)
{
cache0[i]=sub0[i];
cache1[i]=sub1[i];
cache2[i]=sub2[i];
}
for(i=0;i<18;i++)
{
st=daxiao(cache0[0],cache1[0],cache2[0]);
if(st==0&&s1<6){cache0[0]=cache0[1];cache0[1]=sub0[s1];s1++;r=1;}
if(st==0&&s1>=6&&r==0){cache0[0]=cache0[1];cache0[1]=32767;}
if(st==1&&s2<6){cache1[0]=cache1[1];cache1[1]=sub1[s2];s2++;r=1;}
if(st==1&&s2>=6&&r==0){cache1[0]=cache1[1];cache1[1]=32767;}
if(st==2&&s3<6){cache2[0]=cache2[1];cache2[1]=sub2[s3];s3++;r=1;}
if(st==2&&s3>=6&&r==0){cache2[0]=cache2[1];cache2[1]=32767;}
r=0;
}
printf("\n");
}
void main()
{
int cache0[2],cache1[2],cache2[2];//
int temp[6];//
int sub0[6],sub1[6],sub2[6];//
int tp;
printf("请输入三组数\n");
printf("第一组");
in(temp);
paixu(temp);
xianshi(temp);
fuzhi(temp,sub0);
printf("\n第二组");
in(temp);
paixu(temp);
xianshi(temp);
fuzhi(temp,sub1);
printf("\n第三组");
in(temp);
paixu(temp);
xianshi(temp);
fuzhi(temp,sub2);
printf("归并排序结果:");
guibing(sub0,sub1,sub2,cache0,cache1,cache2);
}