#define MaxSize 500 #include<iostream> using namespace std; int A[MaxSize];//全局变量似乎不能用引用 void Merge(int A[],int p,int q,int r) { int left[MaxSize]; int right[MaxSize];//需要临时数组,因为不能无序覆盖 int count_1=0; int count_2=0; for(int i=p;i<=q;i++) { left[count_1++]=A[i]; } for(int i=q+1;i<=r;i++) { right[count_2++]=A[i]; } int i=0,j=0; int count=p; while(i<count_1&&j<count_2)//原地排序 { if(left[i]>right[j]) { A[count++]=left[i++]; } else if(left[i]<right[j]) { A[count++]=right[j++]; } } if(i==count_1&&j!=count_2) { while(j!=count_2) { A[count++]=right[j++]; } } else if(i!=count_1&&j==count_2) { while(i!=count_1) { A[count++]=left[i++]; } } } void MergeSort(int A[],int p,int r)//递归辅助函数 { if(p>=r) return;//递归终点!!!!! int q; if(p<r) q=(p+r)/2; MergeSort(A,p,q); MergeSort(A,q+1,r); Merge(A,p,q,r); } int main(void) { int count=5; for(int i=0;i<count;i++) { cin>>A[i]; } MergeSort(A,0,4);//规定好带不带边界,一代全带 for(int i=0;i<count;i++) { cout<<A[i]<<" "; } cout<<endl; return 0; }