这一部分来分析一下归并排序,归并排序是把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。看一下代码

105,排序-归并排序_归并排序

先把待排序列分为两部分,然后各部分再分为两部分,一直分下去,直到不能再分为止,然后在两两合并两个有序数组,直到合并完为止。有序数组的合并也很好理解,代码可以参考上面。上面代码在合并的时候都会创建一个临时数组tmp,如果排序的数组很大的话,每次merge的时候都会浪费大量的空间,不是最好的解决方式,这里可以优化一下,看代码

105,排序-归并排序_归并排序_02

上面的代码都是递归实现的,下面看一个非递归实现的

105,排序-归并排序_数组_03

他说先合并两个然后在合并4个,然后在合并8个……直到合并完为止,下面有一幅图来简单了解下什么叫归并排序。

105,排序-归并排序_归并排序_04

上面的图表示的很明白,这就是归并排序的原理

105,排序-归并排序_有序数组_05

关注,点赞,评论,转发