七大排序算法(4)------归并排序(递归和非递归)

本文详细介绍了归并排序的递归和非递归实现方式。在递归实现中,通过不断将序列一分为二并排序后合并,直到序列只剩一个元素。非递归实现则是通过逐步改变步长进行区间合并。两种方法的时间复杂度均为O(nlogn),空间复杂度为O(N),且归并排序是稳定的排序算法。
摘要由CSDN通过智能技术生成

         在本文中使用到的升序,降序,交换函数的代码实现见:这篇博客

         在单链表的基本操作中,有一个操作为合并两个有序的单链表使合并后的链表仍然有序。本文中归并排序与这个思想类似。不断使两两有序的序列进行合并。

归并排序(递归实现)

        例如,有一待排序序列:20 10  9  8  11  10   7  6。


        排序过程如上图所示,

(1)首先将待排序序列一分为二,两个红框框起来的序列。将这两个序列排好序后,利用合并算法进行合并。

(2)在对红框进行排序时,再将其一分为二,对应四个绿框。将绿框排好序后,利用合并算法合并成红框。

(3)再对绿框进行排序时,再将其一分为二,对应8个篮框。此时蓝框中只有一个元素,已经排好序,因此只需利用合并算法将两个蓝框合并成绿框。

        上述过程是一个递归过程,每一步对应的操作相同,先拆分。将一个大的序列分解为一个个小的序列。待排序序列中只有一个元素时,此时便排序完成。再进行一个个有序序列的合并。

        所以,利用递归调用解决该问题,将待排序序列一分为二,使这两部分分别有序后再进行合并。再对这两部分排序时也是一分为二进行排序后在进行合并。

        因此,使用递归函数来使待排序序列有序。先将待排序序列一分为二后分别调用递归函数使之有序,在进行有序序列的合并。在递归函数中,如果待排序序列的元素个数为1&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值