【8.5】归并排序

归并排序思想:

  • 划分为两个子序列
  • 分别对每个子序列归并排序
  • 有序子序列合并

两路归并排序:

归并函数:

归并算法优化:

  • 同优化的快速排序一样,对基本已排序序 列直接插入排序
  • R.Sedgewick 优化:归并时从两端开始 处理,向中间推进,简化边界判断

R.Sedgewick优化归并思想:

优化的归并排序(阈值28):

优化的归并函数:

算法复杂度分析

  • 空间代价:Θ(n)
  • 划分时间、排序时间、归并时间
  • T(n) = 2T (n / 2) + cn
  • T(1) = 1
  • 归并排序总时间代价也为
  • Θ(nlog n)
  • 不依赖于原始数组的输入情况,最大、最小以及平均时间代价均为 Θ(nlog n)

思考

  • 普通归并和 Sedgewick 算法都是稳定的吗?
  • 两个归并算法哪个更优?
  • 二者的比较次数和赋值次数
  • 归并时子序列下标是否需要边界判断

参考资料

北京大学 《数据结构与算法》 张铭、赵海燕、宋国杰、黄骏、邹磊、陈斌、王腾

这里是一个广告位,,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn