美文网首页
归并排序——MergeSort

归并排序——MergeSort

作者: JiangCheng97 | 来源:发表于2019-03-21 21:44 被阅读0次

归并排序

归并排序算法的运作如下:

  1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
  2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置
  3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
  4. 重复步骤3直到某一指针到达序列尾
  5. 将另一序列剩下的所有元素直接复制到合并序列尾

归并排序复杂度分析

时间复杂度O(nlogN)*

源码

public class MergeSort{
    public static void mergeSort(int[] arr){
        if(arr.length < 2 || arr == null){
            return;
        }
        sortProcess(arr,0,arr.length-1);
    }
    
    public static void sortProcess(int[] arr,int l,int r){
        if( l == r){
            return;
        }
        int mid = (l+r)/2;
        sortProcess(arr,l,mid);
        sortProcess(arr,mid+1,r);
        
        merge(arr,l,r,mid);
    }
    
    public static void merge(int[] arr,int l,int r,int mid){
        int[] help = new int[r-l+1];
        int i = 0;
        int p1 = l;
        int p2 = mid+1;
        while(p1 <= mid && p2 <=r ){
            help[i++] = arr[p1]<arr[p2] ? arr[p1++] : arr[p2++];
        }
        
        //两个有且只有一个越界
        while(p1<=mid){
            help[i++] = arr[p1++];
        }
        
        while(p2 <=r){
            help[i++] = arr[p2++];
        }
        
        for(i=0; i<help.length ; i++) {
            arr[l+i] = help[i];
        }
    }
}

相关文章

  • 归并排序的递归实现与非递归实现

    归并排序 归并排序图 递归实现简介代码示例 mergesort(left,right,**a){ if(l...

  • 算法分析与设计复习

    1、排序算法 QuickSort 快速排序 MergeSort 归并排序 HeapSort 堆排序 BubbleS...

  • 排序算法(2):归并排序

     归并排序:归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,...

  • python归并排序--递归实现

    归并排序: 归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,...

  • 排序算法-5--- 归并排序

    归并排序 Merge sort 1、概念 归并排序(英语:Merge sort,或mergesort),是创建在归...

  • 归并排序

    什么是归并排序? 归并排序(Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,...

  • python实现归并排序(MergeSort)

    python实现【归并排序】(MergeSort) 算法原理及介绍 归并排序的核心原理是采用分治法(Divide ...

  • 归并排序

    归并排序 归并排序(Mergesort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分...

  • 第三章:高级排序算法

    归并排序算法(mergeSort) 算法思想:Python使用函数实现: 自底向上的归并排序算法 算法思想:Pyt...

  • 时间复杂度为O(nlogn)的算法

    mergeSort 口诀: 左拆分,左合并,右拆分,右合并,最后合并左右。 归并排序的逻辑 归并排序的战略(宏观)...

网友评论

      本文标题:归并排序——MergeSort

      本文链接:https://www.haomeiwen.com/subject/caphvqtx.html