就不写代码了(写了估计会出问题调试好一会哈哈)
简述一下归并的过程
和快排一样用数组下标来模拟被分割的数组
因为是根据二叉树遍历衍生的算法所以我们首先要把数组还原成树
具体的还原过程:
1,思想是用下标来模拟数组拆分成树的拆分过程
2,比如L表示将要拆分的左边界 R表示右边界 M表示L和R的中间值
经过这一步操作已经用下标把数组拆成了两段 第一段 左边的 [L,M] 第二段 右边的[M,R]
3,递归
SortFunc(arr,L,R)
{ if(L == R) return; M = (L+R)/2; ... //先对左子树进行分割 SortFunc(arr,L,M); //在所有左子树进行完之后对右子树进行分割 SortFunc(arr,M+1,R); //开始归并 就是把一个节点上左右孩子进行排序 Merge(arr,L,R);
}
4,如何归并:
分割的操作吗 结果就是两端数组
所以合并就是就是制造两段有序数组进行合并
两段数组就是 [L,M]和[M+1,R] 给左右数组各添加用于比较值大小的索引 然后通过左右下表的挪动决定值左边数组元素插入到右边数组的位置(不细说了 就是两个有序数组合并成一个有序数组)