归并排序_java


import java.util.*;

public class Main{
    private static int N=100010;
    private static int[] res=new int[N];
    private static int[] temp=new int[N];
    
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        for(int i=0;i){
            res[i]=in.nextInt();
        }
        merge_sort(0,n-1);
        for(int i=0;i){
            System.out.printf("%d ",res[i]);
        }
    }
    
    public static void merge_sort(int l,int r){
        if(l>=r){
            return;
        }
        int mid=(l+r)/2;
        merge_sort(l,mid);
        merge_sort(mid+1,r);
        int i=l, j=mid+1, k=0;
        while(i<=mid && j<=r){
            temp[k++]=res[i]<=res[j]?res[i++]:res[j++];
        }
        while(i<=mid){
            temp[k++]=res[i++];
        }
        while(j<=r){
            temp[k++]=res[j++];
        }
        for(i=l,j=0;i<=r;i++,j++){
            res[i]=temp[j];
        }
    }
}