老生常谈——分治法与归并排序

本文通过实例详细讲解了如何使用分治法实现归并排序。首先阐述了如何合并两个有序序列,接着通过逐步拆分和合并,解释了归并排序的逻辑,并给出了代码实现。归并排序是一种效率较高的排序算法,利用了分治策略。
摘要由CSDN通过智能技术生成

首先来决一个基本的问题:如何合并两个有序序列?
同样,我们也采取图形演示的方法,来一步一步解决问题,假设我们现在存在两个有序序列:1,3,5和2,4,6,7.
那么我们首先应该在脑海中画出这样的一副图形:
这里写图片描述

到现在,我们已经有解决问题的思路了:

比较这两个序列的第一个元素,谁较小就输出谁,,然后将较小的元素从原队列删除.如此往下进行,如果某个队列为空,则直接将另一个队列中元素依序输出就好.

按照上面的思路,整个过程用图形演示:
1. 选取较小元素
这里写图片描述
2. 选取较小元素
这里写图片描述
3. 选取较小元素
这里写图片描述
4. 选取较小元素
这里写图片描述
5. 选取较小元素,此时队列arr1已经为空了,因此后面只需要依次输出arr2中的元素即可
这里写图片描述
6. 输出元素
这里写图片描述
7. 输出元素
这里写图片描述

到现在整个过程已经描述清楚了.在具体的代码实现过程中,删除操作可以用移动下标来实现(许多操作,其实换个角度来想的)
代码实现为:

 public static void merge(int[] arr, int start, int mid, int 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值