1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define ms(x,n) memset(x,n,sizeof x); 9 #include 10 const int maxn=1005;11 const int inf=0x3f3f3f3f;12 int a[maxn];//待排序列,临时数组13 int n,m,tmp,num;14 using namespace std;15 void merges(int a[],int b[],int l,int r,int rightend)16 {17 //左起始位置,右起始位置,右终点位置18 int leftend=r-1;19 tmp=l;//存放结果的数组的初始位置20 num=rightend-l+1;//此次归并的元素总个数21 while(l<=leftend&&r<=rightend)22 {23 if(a[l]<=a[r])24 b[tmp++]=a[l++];25 else26 b[tmp++]=a[r++];27 }28 while(l<=leftend)29 b[tmp++]=a[l++];30 while(r<=rightend)31 b[tmp++]=a[r++];32 for(int i=0;i >1;38 if(l >1;41 msort(a,b,l,mid);42 msort(a,b,mid+1,rightend);43 merges(a,b,l,mid+1,rightend);44 }45 }46 void Merge_sort(int a[],int n)//函数统一的接口47 {48 //int *b;49 //b=malloc(n*sizeof(int));50 int *b=new int[n];51 msort(a,b,0,n-1);52 free(b);53 }54 int main()55 {56 cin>>n;57 for(int i=0;i >a[i];59 Merge_sort(a,n);60 for(int i=0;i