【MOOC】归并排序

本文详细介绍了归并排序的原理,包括递归和非递归两种实现方式。通过具体例子展示了如何进行序列合并,并分析了归并排序的优缺点,如需要额外空间和大量的元素复制。此外,还讨论了一趟归并排序策略,逐步扩大有序子序列直至整个序列完全有序。
摘要由CSDN通过智能技术生成

 

 

void Merge(Left,LeftEnd,Right,RightEnd)

1.填TmpA数组(从Left开始填到RightEnd)

如果A[Left]<=A[Right],填A[Left++];不然填A[Right++];

Left>LeftEnd或Right>RightEnd时退出

再填入剩下的A[Left]或A[Right]

2.填回A数组(从A[RightEnd]开始填到填完本次所有元素)

 一、递归算法

MSort(Left,RightEnd)

只有一个元素时:Left==RightEnd,直接返回;

有两个元素时:    Left==RightEnd-1,两个MSort直接返回,只执行一个Merge,能将两元素按顺序放置在合适的位置上

每次可以返回数组某个部分的排序结果

例:

A={55,46,78,5,7,9}

 

 

 

 

 

因为TmpA跟A对应的顺序是一样的,因此一个完整排序也只需要一个TmpA, 

如果在Merge函数里申请,则费时费空间

 二、非递归算法

 一趟Merge:

length从1->2->4->…

两有序子列慢慢从小变大

但是因为不一定是偶数个,最后几次末尾可能会剩元素,

因为内部有序只要贴在末尾就行了,等待最后一步使整个序列完全有序 

 非递归算法同一函数接口:

 归并排序缺点:

1.需要一块额外的空间(与原数据量一样大)

2.两数组之间反复复制的操作

因此归并排序一般不用于内部排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值