美文网首页
2018-02-08归并排序学习即思考

2018-02-08归并排序学习即思考

作者: klaaay | 来源:发表于2018-02-08 17:06 被阅读0次

最终完成代码:

void merge(int *a, int l, int m, int r) {
    int start1 = l;
    int end1 = m;
    int start2 = m + 1;
    int end2 = r;
    int k,i;
    k = 0;

    int *temp = (int*)malloc((r - l + 1) * sizeof(int));

    while (start1 <= end1 && start2 <= end2) {
        if (a[start1] < a[start2]) {
            temp[k++] = a[start1++];
        }
        else {
            temp[k++] = a[start2++];
        }
    }
    while (start1 <= end1) {
        temp[k++] = a[start1++];
    }
    while (start2 <= end2) {
        temp[k++] = a[start2++];
    }

    for (i = 0; i < (r - l + 1); i++) {
        a[l + i] = temp[i];
    }
    free(temp);
}

void merge_sort(int *a,int l, int r){
    int m = (l + r) / 2;
    if(l < r){
        merge_sort(a,l,m);
        merge_sort(a,m+1,r);
        merge(a,l,m,r);
    }
}

学习总结:
第一个归并函数是将两个有序数组归并的函数,是通过两两对比分别插入到新数组的过程,因此他需要申请一个和原量数组空间和大小的空间来存放归并后的数组,由于该归并函数是用于归并排序的,所以其中有一个比较重要的操作,就是将归并之后的temp数组在复制给原数组,这样就可以在归并排序这个函数递归调用的时候确保每次调用的两个数组是有序的,其中归并排序这个递归函数采用的是分治法,在不满足条件left <right的情况下,只有可能是只有一个单一元素的数组,因为只有一个元素,因此该数组一定是有序的,之后就是通过两两归并,最终实现最后的排序。

空间及时间复杂度:
空间:O(n)
时间:O(nlogn)


时间复杂度图解分析

计算递归式表示的总代价,我们只要把各层代价加起来,递归树具有lgn+1层,每层的代价均为cn,所以总代价为cn(lgn+1) = cnlgn+cn,即O(nlogn)

稳定与否:稳定

归并排序图解原理

相关文章

  • 2018-02-08归并排序学习即思考

    最终完成代码: 学习总结:第一个归并函数是将两个有序数组归并的函数,是通过两两对比分别插入到新数组的过程,因此他需...

  • 算法入门——归并排序、希尔排序

    上篇文章我们学习了算法入门——堆排序,这篇文章我们学习算法入门——归并排序、希尔排序。 归并排序 归并排序是将一个...

  • 6-十大排序篇二

    十大排序(2) 今天先学习第二大类排序算法 归并排序 排序排序 希尔排序 堆排序 1.归并排序 分析:利用归并的思...

  • 排序学习 - 为了面对算法面试(2)

    排序学习 - 为了面对算法面试(1) - 选择排序/冒泡排序/插入排序 4.归并排序:归并排序(MERGE-SOR...

  • 排序算法

    约定 选择排序 冒泡排序 插入排序 希尔排序 归并排序1. 归并方法2. 自顶向下归并排序3. 自底向上归并排序 ...

  • 【数据结构】【C#】021-归并类排序: ✌二路归并(稳定)

    归并排序:二路归并(稳定) 基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即...

  • 排序二:归并、快排

    文章结构 归并排序 快速排序 源码 1. 归并排序 1.1 什么是归并排序 归并排序的思想是:将待排序的区间平分成...

  • 2023-01-09

    1、学习了归并排序,归并排序的代码思路。看到第40分钟。2、学习了netty,学习了bytebuffer的内部结构...

  • java归并排序

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

  • 《算法》归并排序学习

    继续学习《算法》,这次依然是排序算法的学习:归并排序。在这次的学习中本人遇到了一些问题,主要就是归并排序的实现较前...

网友评论

      本文标题:2018-02-08归并排序学习即思考

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