问题

思路说明

归并操作过程:

  1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
  2. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
  3. 重复步骤3直到某一指针达到序列尾
  4. 将另一序列剩下的所有元素直接复制到合并序列尾

上述说法是理论表述,下面用一个实际例子说明:

首先将这个数组通过递归方式进行分解,直到:[6],[2],[3],[1],[7]

然后开始合并排序,也是用递归的方式进行:

  1. 初始:
    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]

  2. 通过反复应用上面的流程,实现[1,2,3,6]与[7]的合并

  3. 最终得到排序结果[1,2,3,6,7]

解决(Python)