算法学习归并排序

Posted teensspirit-code-life

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法学习归并排序相关的知识,希望对你有一定的参考价值。

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)

 

  

以上是关于算法学习归并排序的主要内容,如果未能解决你的问题,请参考以下文章

算法导论学习笔记-归并排序

JavaScript算法(归并排序与快速排序)

从零开始学习算法之归并排序[1](2.2归并排序)

经典算法学习——归并排序

重学数据结构和算法之归并排序快速排序

算法学习归并排序