#include <iostream>
using namespace std;
void Merge(int SR[],int i,int m,int n)//n表示数组中最后一个元素的下标,i表示第一个元素的下标,m表示前一个数组最后一个元素的下标
{
int *TR=new int[n-i+1];
int ptr1=i;
int ptr2=m+1;
int j=0;
while(ptr1<=m&&ptr2<=n)//可能有一个没有完
{
if(SR[ptr1]<=SR[ptr2])
{
TR[j++]=SR[ptr1++];
}
else{
TR[j++]=SR[ptr2++];
}
}
while(ptr1<=m)//此处为m!!!
{
TR[j++]=SR[ptr1++];
}
while(ptr2<=n)//此处为n!!!
{
TR[j++]=SR[ptr2++];
}
//for(int j=0;j<n-i+1;j++)
//{
// cout<<TR[j];//j写成i了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//}
int ptr=i;
for(int j=0;j<n-i+1;j++)//此处j<n-i+1而不是n
{
SR[ptr++]=TR[j];
}
}
void MSort(int SR[],int s,int t)
{
if(s!=t)
{
int m=(s+t)/2;
MSort(SR,s,m);
MSort(SR,m+1,t);//加一
Merge(SR,s,m,t);
}
}
int main()
{
int arr[]={4,2,1,9,2,5,7,8,10,34,5436,54,3235,435,435,4,3};
//Merge(arr,3,3,4);
//cout<<sizeof(arr)/sizeof(arr[0]);
MSort(arr,0,16);
for(int i=0;i<17;i++)
{
cout<<" "<<arr[i];
}
getchar();
return 0;
}