算法复习——分而治之篇之归并排序

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

算法复习——分而治之篇之归并排序

以下内容主要参考中国大学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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值