#include<iostream>
using namespace std;
const int len=5;
int sortArrary[len];
//合并
void merge(int s1,int f1,int f2)
{
int i,j,k;
int b[100];
i=s1;
j=f1+1;
k=s1;
while(i<=f1&&j<=f2)
{
if(sortArrary[i]>sortArrary[j])
{
b[k]=sortArrary[j];
j++;
}
else
{
b[k]=sortArrary[i];
i++;
}
k++;
}
if(j==f2+1)
{
while(i<=f1)
{
b[k]=sortArrary[i];
k++;
i++;
}
}
for(i=s1;i<k;i++)
{
sortArrary[i]=b[i];
}
}
//合并排序
void BottonUpSort()
{
int i=0, s=1,t=1,time=1;
while(t<len)
{
s=t;
t=2*s;
i=0;
while(i+t<=len)
{
merge(i+1,i+s,i+t);
cout<<"第"<<time++<<"次合并";
for (int l=i+1;l<i+t;l++)
{
cout<<sortArrary[l]<<" ";
}
cout<<endl;
i=i+t;
}
if(i+s<len)
{
merge(i+1,i+s,len);
cout<<"第"<<time++<<"次合并";
for (int l=i+1;l<len;l++)
{
cout<<sortArrary[l]<<" ";
}
cout<<endl;
}
}
}
void print()
{
cout<<"排序后:";
for(int j=1;j<=len;j++)
{
cout<<sortArrary[j]<<" ";
}
}
int main()
{
cout<<"请输入"<<len<<"个数字:"<<endl;
for(int i=1;i<=len;i++)
{
cin>>sortArrary[i];
}
cout<<"自底向上合并排序过程:\n";
BottonUpSort();
print();
return 0;
}