非常好,《数据结构初阶》系列中“八大排序——巅峰决战”可以做成一章极具冲击力的知识点合集。下面是本章节的详细内容结构,适合写成讲义、教学 PPT 或视频脚本,涵盖 八种经典排序算法 的原理、实现、复杂度比较与适用场景。


《数据结构初阶》

八大排序——巅峰决战 🥇


🧭 目录

  1. 冒泡排序(Bubble Sort)
  2. 选择排序(Selection Sort)
  3. 插入排序(Insertion Sort)
  4. 希尔排序(Shell Sort)
  5. 归并排序(Merge Sort)
  6. 快速排序(Quick Sort)
  7. 堆排序(Heap Sort)
  8. 计数排序(Counting Sort)
  9. 巅峰对比分析表
  10. 排序算法选择指南

1️⃣ 冒泡排序(Bubble Sort)

  • 核心思想:两两比较,较大(或较小)元素逐步“冒泡”到末尾
  • 时间复杂度:最坏 O(n²),最好 O(n)(已排序 + 优化)
  • 空间复杂度:O(1)
  • 稳定性:稳定
  • 适用场景:数据量小、基本有序时简单高效
def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        flag = False
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                flag = True
        if not flag:
            break

2️⃣ 选择排序(Selection Sort)

  • 核心思想:每轮从未排序区间选出最小元素放到前面
  • 时间复杂度:O(n²)
  • 空间复杂度:O(1)
  • 稳定性:不稳定
  • 适用场景:交换次数较少要求的场合

3️⃣ 插入排序(Insertion Sort)

  • 核心思想:将每个元素插入到前面已排序子数组的合适位置
  • 时间复杂度:O(n²),最好 O(n)
  • 空间复杂度:O(1)
  • 稳定性:稳定
  • 适用场景:数据量小或局部有序

4️⃣ 希尔排序(Shell Sort)

  • 核心思想:将数组按间隔分组,对每组进行插入排序,逐步缩小间距
  • 时间复杂度:平均约 O(n^1.3),最坏 O(n²)
  • 空间复杂度:O(1)
  • 稳定性:不稳定
  • 适用场景:插入排序的优化版本,适用于中等规模数据

5️⃣ 归并排序(Merge Sort)

  • 核心思想:分而治之,递归拆分 + 合并有序子序列
  • 时间复杂度:O(n log n)
  • 空间复杂度:O(n)
  • 稳定性:稳定
  • 适用场景:大数据量、要求稳定排序时的首选

6️⃣ 快速排序(Quick Sort)

  • 核心思想:分区法,选一个“基准”,左边比它小,右边比它大,递归处理
  • 时间复杂度:平均 O(n log n),最坏 O(n²)
  • 空间复杂度:O(log n)(递归栈)
  • 稳定性:不稳定
  • 适用场景:最常用,适合大多数实际场景,效率极高

7️⃣ 堆排序(Heap Sort)

  • 核心思想:构造最大堆,每次取堆顶元素(最大值)放到末尾
  • 时间复杂度:O(n log n)
  • 空间复杂度:O(1)
  • 稳定性:不稳定
  • 适用场景:不要求稳定排序但内存敏感时适合使用

8️⃣ 计数排序(Counting Sort)

  • 核心思想:统计每个元素出现次数,通过“桶”来计数排序
  • 时间复杂度:O(n + k),k为数值范围
  • 空间复杂度:O(k)
  • 稳定性:稳定
  • 适用场景:数据范围小,且是整数

9️⃣ 巅峰对比分析表 🔥

排序算法时间复杂度(最坏)时间复杂度(平均)空间复杂度稳定性是否原地
冒泡排序O(n²)O(n²)O(1)
选择排序O(n²)O(n²)O(1)
插入排序O(n²)O(n²)O(1)
希尔排序O(n²)O(n^1.3)O(1)
归并排序O(n log n)O(n log n)O(n)
快速排序O(n²)O(n log n)O(log n)
堆排序O(n log n)O(n log n)O(1)
计数排序O(n + k)O(n + k)O(k)

🔟 排序算法选择指南 🧠

场景/需求推荐算法
数据量小插入排序、冒泡排序
数据基本有序插入排序
要求稳定性归并排序、计数排序
数据量大、效率优先快速排序
内存限制、稳定性无要求堆排序
元素范围窄为整数计数排序

📌 总结一句话
“没有最强的排序,只有最适合的排序!”