美文网首页
归并排序-merge递归

归并排序-merge递归

作者: gbmaotai | 来源:发表于2019-05-28 17:43 被阅读0次

merge sort

image

用到递归的思想
分成两半进行排序,把结果进行合并(merge),再分成两半进行排序,一直这样递归下去。

递归(recursion)

时间和空间消耗比较大。每一次函数调用都需要在内存栈中分配空间以保存参数,返回地址以及临时变量,而且往栈里面压入数据和弹出都需要时间。

要注意basecase,终止条件

对一个数组前半部和后半部都是排过序的进行合并

void merge(int array[], int leftpos, int rightpos, int lastpos)
{
    int* temparray = (int* )malloc(sizeof(int)*(lastpos - leftpos + 1));
    int i = leftpos;
    int j = rightpos;
    int k = 0;
    while((i<rightpos)&&(j<=lastpos)  ){
        if(array[i] <= array[j])
            temparray[k++] = array[i++];
        else
            temparray[k++] = array[j++];
    }
    while(i<rightpos)
        temparray[k++] = array[i++];
    while(j<=lastpos)
        temparray[k++] = array[j++];    
    
    for(i=0;i<=lastpos-leftpos;i++)
    {
        array[leftpos+i] = temparray[i]; 
    }
    free(temparray);
}

把数组分为两半,前半段排序,后半段排序,合并

void recursionmerge(int array[],int left, int right)
{
    if(left == right ) 
        return;
    int mid = (right+left)/2;

    recursionmerge(array,left,mid);
    recursionmerge(array,mid+1,right);
    merge(array,left,mid+1,right);
}

时间复杂度

平均,最好,最坏 O(N*log2N)

不断分成两半(分的次数就是对数log2N, 每次又是N 所以就是N*log2N)。

空间复杂度
O(N)

稳定, Java对象的排序使用mergesort. 改进版叫TimSort.

相关文章

  • 数据结构与算法之美-归并排序

    Merge Sort - 归并排序 核心:归并排序是采用分治法的一个非常典型的应用。 归并排序的思想就是先递归分解...

  • 数据结构与算法之美-主定理方法(master theorem)和

    1. Merge Sort - 归并排序 核心:归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归...

  • 归并排序算法及分析

    归并排序Merge Sort 下面我们来看看分治策略在排序中的应用 归并排序是递归算法, 思路是将数据表持续分裂为...

  • Java版归并排序算法实现

    merge函数的实现 递归方式实现(自顶向下)的归并排序算法 借用栈实现循环方式(自顶向下)的归并排序算法 不借用...

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

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

  • 算法 -- 归并排序 - 草稿

    merge 归并排序原理 归并排序 == 递归 + 合并 合并 将两个有序的数组合并成一个有序的大数组;(从两个小...

  • 归并排序-merge递归

    merge sort 用到递归的思想分成两半进行排序,把结果进行合并(merge),再分成两半进行排序,一直这样递...

  • 归并排序和快速排序

    1.归并排序(Merge Sort) 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算...

  • java归并排序

    归并排序什么是归并排序:图解归并排序归并排序有两种实现方式,一是基于递归,而是基于迭代1)基于递归的归并排序: 基...

  • 看动画学算法之:排序-归并排序

    简介 归并排序简称Merge sort是一种递归思想的排序算法。这个算法的思路就是将要排序的数组分成很多小的部分,...

网友评论

      本文标题:归并排序-merge递归

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