#include <iostream>
using namespace std;
#define MAXSIZE 20
typedef struct{
int key;
char *otherinfo;
}RedType;
typedef struct{
RedType *r;
int length;
}SqList;
void Create_Sq(SqList &L){
int i,n;
cout<<"数据个数:";
cin>>n;
cout<<"待排序的数据:";
for(i=1;i<=n;i++){cin>>L.r[i].key;
L.length++;
}
}
// 相邻两个有序子序列归并
void Merge(RedType R[],RedType T[],int low,int mid,int high){
int i,j,k;
i=low; j=mid+1;k=low;
while(i<=mid&&j<=high){if(R[i].key<=R[j].key) T[k++]=R[i++];
else T[k++]=R[j++];
}
while(i<=mid)
T[k++]=R[i++];
while(j<=high)
T[k++]=R[j++];
}
void MSort(RedType R[],RedType T[],int low,int high){
int mid;
RedType *S=new RedType[MAXSIZE];
if(low==high) T[low]=R[low];
else{mid=(low+high)/2;
MSort(R,S,low,mid);
MSort(R,S,mid+1,high);
Merge(S,T,low,mid,high);
}
}
// 归并排序
void MergeSort(SqList &L){MSort(L.r,L.r,1,L.length);
}
void show(SqList L){
int i;
for(i=1;i<=L.length;i++)
cout<<L.r[i].key<<" ";
}
int main(){
SqList R;
R.r=new RedType[MAXSIZE+1];
R.length=0;
Create_Sq(R);
MergeSort(R);
cout<<"归并排序:";
show(R);
}