归并排序(Merging Sort)是又一类不同的排序方法。“归并”的含义是将两个或两个以上的有序表组合成一个新的有序表。它的实现方法早已为读者所熟悉,无论是顺序存储结构还是链表存储结构,都可在O(m+n)的时间量级上实现。利用归并的思想容易实现排序。假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到个长度为2或1的有序子序列;再两两归并,……,如此重复,直至得到一个长度为n的有序序列为止,这种排序方法称为2-路归并排序。例如图1为2-路归并排序的一个例子。
![](https://i-blog.csdnimg.cn/blog_migrate/206073a4aba5271308bbe62355f8143d.png)
2-路归并排序中的核心操作是将一维数组中前后相邻的两个有序序列归并为一个有序序列,其算法如算法1所示。
![](https://i-blog.csdnimg.cn/blog_migrate/f9df54b16175d0371a7f3159992e16d9.png)
一趟归并排序的操作是,调用次算法 merge将SR[1..n]中前后相邻且长度为h的有序段进行两两归并,得到前后相邻、长度为2h的有序段,并存放在TR[1..n]中,整个归并排序需进行
趟。可见,实现归并排序需和待排记录等数量的辅助空间,其时间复杂度为O(nlogn)。
递归形式的2-路归并排序的算法如算法2算法3所示。值得提醒的是,递归形式的算法在形式上较简洁,但实用性很差。
与快速排序和堆排序相比,归并排序的最大特点是,它是一种稳定的排序方法。但在一般情况下,很少利用2-路归并排序法进行内部排序。
![](https://i-blog.csdnimg.cn/blog_migrate/44ce0872eec9bfb20e450597551ddedb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8545cee51f7db7124a7e92e3a99b4b5a.png)