#include<iostream.h>
void Merge(int *a,int p,int q,int r)//合并一个数组中前后两个有序序列
{ //p,q,r是数组下标,a[p---q],a[q+1---r]两个有序
int *pA=a+p;
int *pB=a+q+1;
while(pA!=pB&&pB<=a+r)
{
if(*pA<=*pB)
pA++;
else
{
int temp=*pB;
for(int *pTemp=pB;pTemp>pA;pTemp--)//pA至pB-1后移一位
*pTemp=*(pTemp-1);
*pA=temp;//
pA++;
pB++;
}
}
}
void MergeSort(int *a,int m,int n)
{
int q=(m+n)/2;
if(m<n)
{
MergeSort(a,m,q);
MergeSort(a,q+1,n);
Merge(a,m,q,n);
}
}
void main()
{
int a[]={5,4,7,0,1,6,3,9,3,6,7,34,56,37,26};
MergeSort(a,0,14);
for(int i=0;i<15;i++)
cout<<a[i]<<" ";
}