当前课程知识点:数据结构(上) > 第二章 向量(下) > (f)归并排序 > 02F-3 二路归并:实例
首先 这个a图给出了
两个各自有序的子序列
那么这个二路归并算法的要诀就是
我们只需要把注意力关注在
这两个序列的首元素上
这样一个方框
是我们的关注焦点
其余的元素 可以暂时不用顾及
那么每当我们取出
这两个序列各自的首元素的时候
都要从中挑选出更小的那个元素
如果是打平局的话
你可以任意取一个
比如 就这个例子而言
应该取出的是这个2
我们将它择出来
相应地呢
在摘除了首元素以后
后续的元素将逐次递补
也就是说 我们会把注意力关注到
新顶替上来的这个首元素上
同样 在接下来的一轮比对中
我们考察这两个首元素的大小
并且同样地取出其中的更小的那个
4依然比5小
所以4被取出
同样 它的后继们会顶替上来
对这个例子而言 就是10
在接下来的一轮
对两个子向量的首元素
进行比较 发现5更小
无论谁更小 都是一视同仁
我们要把5取出来
同样地 在左侧的这个序列中
它的后继元素8会顶替上来取而代之
所以在接下来的这一轮比对中
我们的关注的焦点
同样聚集在这两个序列新的首元素上
根据刚才所确定的算法和策略
8同样会被摘取出来
13会继续顶替上来
好 在接下来这轮里头
10又因为更小被取出
29取而代之
在接下来13被摘出
顶替上来的21
相对于29 依然还是要小
所以21会被取出
直到最终
一旦有一个向量已经变成空的
那么另一个向量所剩余的元素
无论多少 都直接串接在后边
我们可以看到 按照这样的一个原理
我们确实可以得到一个
更大的单调序列
我们所给的这种二路归并的算法
实际上是非常通用的一个版本
那么在这里 针对于归并排序而言的
实际上 我们用到的是其中的一种特例
也就是说 在这个时候
参与归并的两个序列
实际上是来自于同一个更大的向量
只不过是由其中的三个界桩
也就lo、mi和hi来联合定义的
如果左侧的这个向量称作B
右侧的称作C的话
那么合并起来的整体的这个向量就是A
那我们就来看一下
针对这样一种特殊情况
我们的二路归并算法应该如何实现
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)计算
--演示
--(a)计算--作业
-(b)计算模型
-(b)计算模型--作业
-(c)大O记号
-(c)大O记号--作业
-(d)算法分析
-(d)算法分析--作业
-(e)迭代与递归
-(e)迭代与递归--作业
-(xc)动态规划
-- 演示
-(xc)动态规划--作业
-本章测验--作业
-(a)接口与实现
--02A-5 复制
-(a)接口与实现--作业
-(b)可扩充向量
-(b)可扩充向量--作业
-(c)无序向量
--02C-1 概述
--02C-3 插入
--02C-6 查找
--02C-8 遍历
-(c)无序向量--作业
-(d1)有序向量:唯一化
-(d1)有序向量:唯一化--作业
-(d2)有序向量:二分查找
-(d2)有序向量:二分查找--作业
-(d3)有序向量:Fibonacci查找
-(d3)有序向量:Fibonacci查找--作业
-(d4)有序向量:二分查找(改进)
-(d4)有序向量:二分查找(改进)--作业
-(d5)有序向量:插值查找
-第二章 向量(下)--(d5)有序向量:插值查找
-(e)起泡排序
--02E-2 改进
--02E-3 反例
-(e)起泡排序--作业
-(f)归并排序
-(f)归并排序--作业
-本章测验--作业
-(a)接口与实现
--03A-4 实现
-(a)接口与实现--作业
-(b)无序列表
--03B-2 查找
-(b)无序列表--作业
-(c)有序列表
--03C-3 查找
-(c)有序列表--作业
-(d)选择排序
--03D-1 构思
--03D-2 实例
--03D-3 实现
--03D-4 推敲
--03D-6 性能
-(d)选择排序--作业
-(e)插入排序
--03E-1 经验
--03E-2 构思
--03E-3 对比
--03E-4 实例
--03E-5 实现
-(e)插入排序--作业
-(xd)习题辅导:LightHouse
-本章测验--作业
- (a)栈接口与实现
--04A-1 栈
--04A-2 实例
--04A-3 实现
- (a)栈接口与实现--作业
-(c1)栈应用:进制转换
-第四章 栈与队列--(c1)栈应用:进制转换
-(c2)栈应用:括号匹配
-(c2)栈应用:括号匹配--作业
-(c3)栈应用:栈混洗
-第四章 栈与队列--(c3)栈应用:栈混洗
-(c4)栈应用:中缀表达式求值
-(c4)栈应用:中缀表达式求值--作业
-(c5)栈应用:逆波兰表达式
-第四章 栈与队列--(c5)栈应用:逆波兰表达式
-(d)队列接口与实现
--04D-1 接口
--04D-2 实例
--04D-3 实现
-第四章 栈与队列--本章测验
-(a)树
--05A-1 动机
--05A-2 应用
-(a)树--作业
-(b)树的表示
--05B-2 父亲
--05B-3 孩子
-第五章 二叉树--(b)树的表示
-(c)二叉树
-(c)二叉树--作业
-(d)二叉树实现
-(d)二叉树实现--作业
-(e1)先序遍历
-(e1)先序遍历--作业
-(e2)中序遍历
-第五章 二叉树--(e2)中序遍历
-(e4)层次遍历
-第五章 二叉树--(e4)层次遍历
-(e5)重构
-(e5)重构--作业
-本章测验--作业
-(a)概述
-(a)概述--作业
-(b1)邻接矩阵
-(b1)邻接矩阵--作业
-(c)广度优先搜索
--06C-2 策略
--06C-3 实现
--06C-5 实例
-(c)广度优先搜索--作业
-(d)深度优先搜索
--06D-1 算法
--06D-2 框架
--06D-3 细节
-(d)深度优先搜索--作业
-第六章 图--本章测验