import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for(int i = 0;i<n;i++)
a[i] = sc.nextInt();
mergesort(a,0,n-1);
for(int i=0;i<n;i++)
System.out.printf(a[i]+" ");
}
private static void mergesort(int[] a,int left,int right){
if(left>=right)
return;
int mid = (left+right)/2;
mergesort(a,left,mid);
mergesort(a,mid+1,right);
int i=left,j=mid+1,k=0;
int[] q = new int[right-left+1];
while(i<=mid&&j<=right)
{
if(a[i]<a[j])
q[k++] = a[i++];
else
q[k++] = a[j++];
}
while(i<=mid)
q[k++] = a[i++];
while(j<=right)
q[k++] = a[j++];
for(int c=left,d=0;c<=right;c++,d++)
a[c] = q[d];
}
}
这个题我需要注意的点就是在创建辅助数组的时候,那个长度随着递归的深度加深,数组的长度是需要改变的,我一直使用的是传入数组的长度,其他那个辅助数组的长度随着递归的深入是会根据right和left来改变的。