调试了一下午时间才把问题搞定,真是“事非经过不知难”
void merge(int *A,int *B,int s,int m,int e){
int k=s,t=m+1;
while(s<=m&&t<=e){
if(A[s]<A[t]){
B[k++]=A[s++];
}else{
B[k++]=A[t++];
}
}
while(s<=m)
B[k++]=A[s++];
while(t<=e)
B[k++]=A[t++];
}
void msort(int *A,int *B,int s,int e){
int *C=new int[e-s+1];
if(s==e){
B[s]=A[s];
}else{
int m=(s+e)/2;
msort(A,C,s,m);
msort(A,C,m+1,e);
merge(C,B,s,m,e);
}
}
void mergeSort(int *A,int n){
msort(A,A,0,n-1);
}
算法时间复杂度为O(nlogn).