← 返回课程列表
算法通关训练营 · 排序篇(从 O(n²) 到 O(n log n) 的跃迁)

算法通关训练营 · 排序篇(从 O(n²) 到 O(n log n) 的跃迁)

课程简介

这是必学必会「算法」科目的排序专题课,对应缺口体系 B 系列(排序与选择)。从最朴素的插入、选择、冒泡三种平方级排序讲起,带你亲手写下每一行代码、用循环不变量证明正确性,再一路跃迁到归并、堆、快排等 O(n log n) 经典算法,最后理解比较排序下界与现代标准库为何采用混合排序。每一节都配知识单元 + 实战题。

学习目标

  • 能手写并证明三种 O(n²) 排序的正确性
  • 理解"稳定性""原地性""逆序对"等核心概念及其工程含义
  • 掌握分治排序(归并)与堆结构(堆排序)如何将复杂度压到 O(n log n)
  • 说清快速排序的平均/最坏表现,以及现代混合排序的设计动机

章节概览

  1. 第1节 插入/选择/冒泡排序(本节,缺口 B1)
  2. 第2节 归并排序 Merge Sort(缺口 B2)
  3. 第3节 堆与堆排序 Heap Sort(缺口 B4)
  4. 第4节 快速排序 Quick Sort(缺口 B3)
  5. 第5节 线性时间排序与比较下界(缺口 B5 / B7)
  6. 第6节 中位数、选择与现代混合排序(缺口 B6 / 工程综合)
---
排序模块学习路线:从 O(n²) 地基到工程混合B1插入/选择/冒泡O(n²) 地基B2归并排序分治 O(n log n)B4堆排序原地 O(n log n)B3快速排序平均最快B5/B7计数/基数/桶线性时间B6选择/中位数工程综合先吃透三种 O(n²) 排序(今天)→ 再学 O(n log n) 经典 → 最后理解现代混合排序

图:算法通关训练营·排序篇的章节递进路线

参考代码(Python)

本章核心三种排序的完整可运行实现,建议对照正文在本地跑一遍、打印每趟中间结果:

def insertion_sort(a):
    for i in range(1, len(a)):
        key = a[i]; j = i - 1
        while j >= 0 and a[j] > key:
            a[j + 1] = a[j]; j -= 1
        a[j + 1] = key
    return a

def selection_sort(a):
    n = len(a)
    for i in range(n):
        m = min(range(i, n), key=lambda k: a[k])
        a[i], a[m] = a[m], a[i]
    return a

def bubble_sort(a):
    n = len(a)
    for i in range(n):
        swapped = False
        for j in range(n - 1 - i):
            if a[j] > a[j + 1]:
                a[j], a[j + 1] = a[j + 1], a[j]; swapped = True
        if not swapped: break
    return a

提示:selection_sort 这里用内置 min 示意"找最小",工程实现应手写扫描以保证是纯 O(n²) 原地版。

算法通关训练营 · 排序篇(从 O(n²) 到 O(n log n) 的跃迁) | 必学必会