归并排序
核心:两个有序子列的归并。
和两个多项式相加类似
所谓指针,他的本职就是存位置。
这里的指针可以是整数,存的是下标
L最后都不知道在哪了。聪明一点嘛,不要从左往右倒,从右往左倒嘛
归并算法有两种不一样的策略。分而治之,递归的去考虑问题,
分而治之+归并算法。
递归算法
没有平均时间复杂度,没有最坏时间复杂度,是一个稳定的算法,
我们排序算法的时候,我们这个不符合同意的函数接口。我们定义一个函数接口来调用这个函数
那为什么我们要在最外层还声明TmpA呢,我们要看这是怎么用的。
我们用上面的算法在最外层定义Tmp, malloc 和free只执行一次。然而下面的malloc 和free执行了多次。
非递归算法
归并排序用非递归的算法
实际上我们不需要每次都开一次临时数组,我们可以在A和tmp来回导。
做两步Merge_Pass(),我们确保了最后导出的是是A而不是Tmp
归并排序
优点:平均时间复杂度 Nlogn 最坏时间复杂度 也是NlogN,
缺点:要额外申请一块同大小的数组内存空间,内排序(就是我们所有的操作都可以在内存里面完成)基本不用,在外排序非常有用。
时间: 2024-10-18 11:49:35