十大基础排序算法一一归并排序详解

  1. 归并排序的概念介绍
  2. 原理分析与时间复杂度说明
  3. 两个示例代码
    • 基础演示版 —— 帮助理解归并排序的原理
    • 业务逻辑场景版 —— 演示如何在实际场景中使用归并排序

一、什么是归并排序

归并排序(Merge Sort) 是一种经典的“分而治之(Divide and Conquer)”策略的排序算法,其核心思路是:

  1. 将序列一分为二,分别对左右子序列进行排序;
  2. 将已排好序的左右子序列进行“合并”,得到完整的有序序列。

它最重要、也是最复杂的部分在于“合并(merge)”步骤:给定两个已经分别有序的子序列,如何高效地合并成一个有序序列。

归并排序具有以下特点:

  • 稳定性:如果两个元素的值相等,排序后它们的相对位置不会改变(在合并时不会打乱原有顺序)。
  • 可用于外部排序:当数据量非常庞大,以至于只能部分存储在内存,部分存储在磁盘或其他介质时,归并排序通常是首选方案之一。

二、原理简析

  1. 分(Divide)

    • 若列表长度大于 1,则将其对半拆分为 left 部分和 right 部分;
    • 分别对 leftright 进行递归调用,直到子序列长度为 1(或 0),即“自然有序”。
  2. 治(Conquer)

    • 将排好序的 left 子序列与 right 子序列“归并合并”。
    • 合并时,设立两个指针分别指向 leftright 的起始位置,依次比较,将更小的元素放入结果序列,并移动指针。
    • 当有一方的指针走到尽头,就将另一方剩余的所有元素直接追加到结果序列末尾。

举个简单例子:

  • 原序列:[3, 1, 6, 2]
  • :一拆为二 ⇒ [3, 1][6, 2]
    • [3, 1] 再拆 ⇒ [3][1],分别排好序再合并得到 [1, 3]
    • [6, 2] 再拆 ⇒ [6][2],分别排好序再合并得到 [2, 6]
  • :将 [1, 3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨胜增

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值