天天看点

排序-归并排序

该算法基于一个简单的操作: 将两个有序的队列合成一个更大的有序队列。

排序-归并排序

归并排序保证nlogn。

原地归并的抽象算法(abstract in-place merge):

如何确定i, j, k 的取值,根据下图可以观察出他们的规律:

排序-归并排序

top-down mergesort

自顶向下的归并排序是基于原地归并排序的递归实现。是分治思想的典型例子。

排序-归并排序

代码如下:

bottom-up mergesort:

这种方法是先归并较小的,然后才是较大的,这样避免了递归调用:

观察下图就可以得出上面的算法,注意下图的sz = 1, 2 ,4...而不是 2,4, 8...:

排序-归并排序

总体感觉这种分析方法很重要,如果把这些分析过程搞明白了,代码很容易。以后得改掉先代码后想的习惯。