问题
思路说明
归并操作过程:
- 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
- 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
- 重复步骤3直到某一指针达到序列尾
- 将另一序列剩下的所有元素直接复制到合并序列尾
上述说法是理论表述,下面用一个实际例子说明:
首先将这个数组通过递归方式进行分解,直到:[6],[2],[3],[1],[7]
然后开始合并排序,也是用递归的方式进行:
-
初始:
a = [2,6]
b = [1,3]
c = []
第1步,顺序从a,b中取出一个数字:2,1
比较大小后放入c中,并将该数字从原list中删除,结果是:
a = [2,6]
b = [3]
c = [1]
第2步,继续从a,b中按照顺序取出数字,也就是重复上面步骤,这次是:2,3
比较大小后放入c中,并将该数字从原list中删除,结果是:
a = [6]
b = [3]
c = [1,2]
第3步,再重复前边的步骤,结果是:
a = [6]
b = []
c = [1,2,3]
最后一步,将6追加到c中,结果形成了:
a = []
b = []
c = [1,2,3,6] 通过反复应用上面的流程,实现[1,2,3,6]与[7]的合并
- 最终得到排序结果[1,2,3,6,7]