算法复习——分而治之篇之归并排序
以下内容主要参考中国大学MOOC《算法设计与分析》,墙裂推荐希望入门算法的童鞋学习!
1. 问题背景
杠铃增重问题:
每位参赛运动员向组委会提交排好序的三次试举重量,为便于杠铃拆卸,组委会需对所有试举重量递增排序。

那么组委会该如何根据试举重量安排杠铃增重顺序?
基本的解决方案:
- 选择排序:从待排序元素中迭代选出最小值并排序,在上面的例子中,需要比较66次;
- 插入排序:依次将每个元素插入到已排序序列之中,在上面的例子中,需要比较55次;
以上的解决方案都没有考虑到杠铃增重问题自身具有的特点,那就是局部有序性;但是,在上面的解决方案中,并没有利用到局部有序性。
基于局部有序性,可以提出一种快速合并的方法,比较两有序数组当前最小元素,将较小者逐一合入新数组。
基于该快速合并方法,也能产生两种后续策略:
-
逐一合并,比较27次:

-
两两合并,比较24次:

那么通过求解纲领增重问题的两两合并策略是否能启发我们开发一个很有效的排序策略。
2. 问题定义
排序问题(Sorting Problem)
输入:
- 包含 n n n个数字的序列 < a 1 , … , a n > <a_{1}, \dots, a_{n}> <a1,…,an>
输出:
- 输入序列的升序 < a 1 ′ , a 2 ′ , … , a n ′ > <a_{1}^{'}, a_{2}^{'}, \dots, a_{n}^{'}> <a1′,a2

本文以杠铃增重问题为背景,介绍了归并排序的基本思想及其应用。通过对问题的逐步分解和合并,归并排序能够有效地处理局部有序的情况,实现高效排序。
最低0.47元/天 解锁文章
965

被折叠的 条评论
为什么被折叠?



