当前位置: 首页 > news >正文

计算机软考中级 知识点记忆——排序算法 冒泡排序-插入排序- 归并排序等 各种排序算法知识点整理

一、📌 分类与比较

排序算法

最优时间复杂度

平均时间复杂度

最坏时间复杂度

空间复杂度

稳定性

应用场景与特点

算法策略

冒泡排序

O(n)

O(n²)

O(n²)

O(1)

稳定

简单易实现,适用于小规模数据排序。

交换排序策略

插入排序

O(n)

O(n²)

O(n²)

O(1)

稳定

数据量小或基本有序时高效。

关键字:基本有序

选择排序

O(n²)

O(n²)

O(n²)

O(1)

不稳定

简单但效率低,适用于小规模数据。

快速排序

O(n log n)

O(n log n)

O(n²)

O(log n)

不稳定

最常用的排序算法,适用于大规模数据。

分治法

关键字:有序或者逆序

归并排序

O(n log n)

O(n log n)

O(n log n)

O(n)

稳定

外部排序的最佳选择。

分治法

堆排序

O(n log n)

O(n log n)

O(n log n)

O(1)

不稳定

适用于堆结构、优先队列的实现。

希尔排序

O(n log n)~O(n²)

O(n log n)

O(n²)

O(1)

不稳定

改进的插入排序,适用于中规模数据。

基数排序

O(d(n + k))

O(d(n + k))

O(d(n + k))

O(n + k)

稳定

适用于整数排序、字符串排序。

计数排序

O(n + k)

O(n + k)

O(n + k)

O(n + k)

稳定

适用于范围较小的整数排序。

桶排序

O(n)

O(n)

O(n²)

O(n + k)

稳定

适用于均匀分布的数据。


📌 1. 基本排序算法(简单易实现)

  • 冒泡排序、插入排序、选择排序
  • 时间复杂度高,但易于实现和理解。
  • 常用于小规模数据或已基本有序的场景。
  • 平均时间和最坏时间T复杂度为:O(n^2)
  • 最好的时间T复杂度为:O(n) 选择最好依旧是O(n^2)
  • 也就是在基本排序算法中选择的时间不管好坏都是O(n^2)

📌 2. 高效排序算法(分治思想、树结构)

  • 快速排序、归并排序、堆排序、希尔排序
  • 基于分治思想(快速排序、归并排序)或堆结构(堆排序)。
  • 适用于大规模数据排序。
  • 平均时间T复杂度为:O(n log n)
  • 最坏时间T复杂度为:快速、希尔是O(n^2) ,其余不变
  • 最好时间T复杂度为:O(n log n) 和平均一样,除了希尔是O(n log n) ~O(n^2)

📌 3. 非比较排序算法(适用于特定场景)

  • 基数排序、计数排序、桶排序
  • 不依赖于比较操作,适用于整数或特定场景的数据排序。
  • 时间复杂度与输入数据特性有关。


单独的记忆点 空间复杂度:

高级排序的快速排序空间复杂度是:O(log n)

高级排序的归并排序非比较排序算法的空间复杂度是:O(n)

其余的都是O(1) 原地排序

空间复杂度越大,说明使用的额外空间更多。


📌 4. 常考点与总结

📚 软考中常考内容:

  1. 各种排序算法的 时间复杂度、空间复杂度、稳定性分析
  2. 适用场景:如什么时候选择快速排序、什么时候使用归并排序。
  3. 基于 分治思想(快速排序、归并排序)与堆结构(堆排序) 的应用。
  4. 非比较排序的特点与应用(基数排序、计数排序、桶排序)。

💡 记忆技巧:

  • 稳定性:一般来说,非比较排序和插入、冒泡、归并是稳定的。(非比较排序 + 茶树泡饼)树:基数排序
  • 时间复杂度 O(n log n):快速排序、归并排序、堆排序。
  • 非比较排序:计数、基数、桶排序特别适用于整数或特定场景。

效率排序来看:

  • O(1) > O(log n) > O(n) > O(n log n) > O(n²) > O(2ⁿ) > O(n!)
  • 你的理解非常准确!我们通常把 O(n log n) 算法称为 “高级排序算法”,而把 O(n²) 算法称为 “基础排序算法”


二、时间复杂度的描述,自简单到复杂

1. O(1) - 常数时间复杂度。无论输入多大,执行时间都是固定的。

2. O(log n) - 对数时间复杂度。随着输入规模的增大,所需时间按对数级别增长。

3. O(n) - 线性时间复杂度。执行时间直接与输入规模成正比。

4. O(n^2) - 平方时间复杂度。执行时间为输入规模的平方。

5. O(2^n) - 指数时间复杂度。随着输入规模的增大,所需时间呈指数级增长。

6. O(n!) - 阶乘时间复杂度。这是非常高的一种复杂度形式,不适用于大多数实际应用场景。

相关文章:

  • 腾讯云对象存储m3u8文件使用腾讯播放器播放
  • React 文章列表
  • 2024-04-19| Java: Documented注解学习 JavaDoc
  • 高可靠 ZIP 压缩方案兼容 Office、PDF、TXT 和图片的二阶段回退机制
  • 2025.04.19【Chord diagram】| 弦图绘制技巧大全
  • JavaScript 变量语法扩展
  • Ubuntu 25.04 “Plucky Puffin” 正式发布
  • tensor.repeat和tensor.repeat_interleave
  • Invicti-Professional-V25.4
  • 【Python标准库】数学相关的9个标准库
  • 八大排序之直接插入排序
  • ELK日志系统
  • Kubernetes控制平面组件:高可用 APIServer
  • 详解反射型 XSS 的后续利用方式:从基础窃取到高级组合拳攻击链
  • 定制一款国密浏览器(10):移植SM2算法前,解决错误码的定义问题
  • 【Linux】软件管理机制和软件安装
  • 软件测试--自动化测试1
  • 【操作系统原理02】进程的描述与控制
  • 基于机器学习 LSTM 算法的豆瓣评论情感分析系统
  • matlab论文图一的地形区域图的球形展示Version_1
  • 中办、国办印发《农村基层干部廉洁履行职责规定》
  • 俄官员称乌克兰未遵守停火,乌方暂无回应
  • 能上天入海的“鲲龙”毕业了,AG600取得型号合格证
  • 明查|俄罗斯征兵部门突袭澡堂抓捕壮丁?
  • 两大跨国巨头称霸GLP-1市场,国产减肥药的机会在哪?
  • 《王牌对王牌》确认回归,“奔跑吧”将有主题乐园