这几天开始看算法导论。对归并排序的解释,对我来说又新的认识。
首先假设这里有两个数组:
A
1 | 5 | 7 | 9 | 11 |
B
2 | 4 | 6 | 12 | 14 |
现在将A 和 B 合并到数组 C 中(C大小为10)
那么我们可以使用插入排序,声明两个指针(数组下标表示),对数组A与B比较,如果A当前值小于B,将A当前值赋给C
A往下移一位,C往下移一位,反之亦然。
图:
1 | 5 | 7 | 9 | 11 |
2 | 4 | 6 | 12 | 14 |
1 |
-----------------------------------------------------------------------------
1 | 5 | 7 | 9 | 11 |
2 | 4 | 6 | 12 | 14 |
1 | 2 |
-----------------------------------------------------------------------------
1 | 5 | 7 | 9 | 11 |
2 | 4 | 6 | 12 | 14 |
1 | 2 | 4 |
------------------------------------------------------------------------------
最后结果:
1 | 2 | 4 | 5 | 6 | 7 | 9 | 11 | 12 | 14 |
以上要求A,B是有序数组
假如 操作的数组大小为 1 时,那么我们可以看作A,B已经有序。
而归并思想就是这样,从大小为1时,排序生成大小为2的数组,在将大小为2的数组排序生成大小为4的数组。