在本文中使用到的升序,降序,交换函数的代码实现见:这篇博客
在单链表的基本操作中,有一个操作为合并两个有序的单链表使合并后的链表仍然有序。本文中归并排序与这个思想类似。不断使两两有序的序列进行合并。
归并排序(递归实现)
例如,有一待排序序列:20 10 9 8 11 10 7 6。
排序过程如上图所示,
(1)首先将待排序序列一分为二,两个红框框起来的序列。将这两个序列排好序后,利用合并算法进行合并。
(2)在对红框进行排序时,再将其一分为二,对应四个绿框。将绿框排好序后,利用合并算法合并成红框。
(3)再对绿框进行排序时,再将其一分为二,对应8个篮框。此时蓝框中只有一个元素,已经排好序,因此只需利用合并算法将两个蓝框合并成绿框。
上述过程是一个递归过程,每一步对应的操作相同,先拆分。将一个大的序列分解为一个个小的序列。待排序序列中只有一个元素时,此时便排序完成。再进行一个个有序序列的合并。
所以,利用递归调用解决该问题,将待排序序列一分为二,使这两部分分别有序后再进行合并。再对这两部分排序时也是一分为二进行排序后在进行合并。
因此,使用递归函数来使待排序序列有序。先将待排序序列一分为二后分别调用递归函数使之有序,在进行有序序列的合并。在递归函数中,如果待排序序列的元素个数为1&#x