zoukankan      html  css  js  c++  java
  • 归并排序 2016-12-30 20:17 208人阅读 评论(21) 收藏

    研究僧考试考到了归并排序,当时做题的时候大概知道思路,结果没写上去,快气死了。。。下面总结一下归并排序。

    原理

    将序列每相邻两个数字进行归并操作(merge),形成floor(n/2)个序列,排序后每个序列包含两个元素
    将上述序列再次归并,形成floor(n/4)个序列,每个序列包含四个元素
    重复步骤2,直到所有元素排序完毕

    实例

    假设有一组数字:9 1 5 3 4 2 6 8 7 ,使用归并排序来排序,结果如下:
    第一遍:1 9 3 5 2 4 6 8 7
    第二遍:1 3 5 9 2 4 6 8 7
    第三遍:1 2 3 4 5 6 8 9 7
    第四遍:1 2 3 4 5 6 7 8 9
    完成。先是两两一组,然后四四一组,然后大家一起一组,排序完成。

    复杂度等

    时间复杂度

    归并排序的形式就是一棵二叉树,它需要遍历的次数就是二叉树的深度,而根据完全二叉树的可以得出它的时间复杂度是O(n*log2n)。

    空间复杂度

    由前面的算法说明可知,算法处理过程中,需要一个大小为n的临时存储空间用以保存合并序列。

    算法稳定性

    在归并排序中,相等的元素的顺序不会改变,所以它是稳定的算法。

    比较

    若从空间复杂度来考虑:首选堆排序,其次是快速排序,最后是归并排序。
    若从稳定性来考虑,应选取归并排序,因为堆排序和快速排序都是不稳定的。
    若从平均情况下的排序速度考虑,应该选择快速排序。

    这些排序我们都应该掌握,比较都是基础的排序。

  • 相关阅读:
    企业组织与经营管理
    VS2008试用版到期解决办法
    [分期付款] 建行安居分期,刚申请过,最高额度居然能申请到100万!汗。。
    [手游新项目历程]-29- windows-PC与 linux虚拟机交互
    诛仙手游培元属性
    [Warning] TIMESTAMP with implicit DEFAULT value
    bzoj3631
    bzoj1257
    bzoj1041
    bzoj1560
  • 原文地址:https://www.cnblogs.com/zhemeban/p/7183080.html
Copyright © 2011-2022 走看看