【算法学习】归并排序

1.算法思路:

  (1)将待排序数组分为两份,利用递归将两份数组排好序

  (2)将两个有序数组归并成一个有序数组。

      实现方法:

        a.设置两个指针,分别指向两个数组的开头,比较指针所指向的数字,将较小的数字加入一个辅助数组中,指针前移,直到其中一个指针溢出

        b.将未溢出的数组剩余的元素加入辅助数组中

        c.将辅助数组整体拷贝到原来的数组中

2.代码(JAVA):

public class mergesort{
    public static void mergeSort(int[] arr, int l, int r) {
        if(l<r){
            int mid=l+(r-l)/2;
            mergeSort(arr,l,mid);
            mergeSort(arr,mid+1,r);
            merge(arr,l,r);
        }
    }
    
    public void merge(int[] arr,int l,int r){
        int[] tmp=new int[r-l+1];
        int mid=l+(r-l)/2;int p1=l;
        int p2=mid+1;
        int i=0;
        while(p1<=m&&p2<=r){
            if(arr[p1]<arr[p2])
                tmp[i++]=arr[p1++];
            else
                tmp[i++]=arr[p2++];
        }
        while(p1<=m)
            tmp[i++]=arr[p1];
        while(p2<=r)
            tmp[i++]=arr[p2];
        for(i=0;i<arr.length;i++){
            arr[l+i]=tmp[i];
        }
    }
}

 

3.算法分析:

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

 

  

posted @ 2019-10-22 21:46  teensSpirit  阅读(88)  评论(0编辑  收藏  举报