6.归并排序

 

代码实现:

public class MergeSort {
    //归并排序
    /*
    * 将两个已排序的数组,进行逐步对比,整合为一个有序的数组
    * */
    public static void process(int arr[],int L,int R){
        if(arr==null || arr.length<2)return;
        if(L==R)return;
        int mid=L+((R-L)>>1);
        process(arr,L,mid);
        process(arr,mid+1,R);
        merge(arr,L,mid,R);
    }
    public static void merge(int[] arr,int L,int M,int R){
        int[] help=new int[R-L+1];
        int p1=L;
        int P2=M+1;
        int i=0;
        while (p1<=M && P2<=R){
            help[i++]=arr[p1] <= arr[P2]?arr[p1++]:arr[P2++];
        }
        while (p1<=M){
            help[i++]=arr[p1++];
        }
        while (P2<=R){
            help[i++]=arr[P2++];
        }
        for (i=0;i<help.length;i++)arr[L+i]=help[i];
    }

    public static void main(String[] args) {
        int[] arr=new int[]{5,8,1,6,7,3,2,1};
        process(arr,0,arr.length-1);
        for (int a:arr) System.out.println(a);
    }
}

  

时间复杂度:O(N*LogN)

posted @ 2024-04-01 10:40  dmfsimle  阅读(3)  评论(0)    收藏  举报