算法刷题1-10大排序算法汇总

十种常见排序算法可以分为两大类:

  • 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。
  • 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。

|--------|----------|-----------|-----------|-----------|----------|-----|------|
| 排序方法 | 分类 | 时间复杂度(平均) | 时间复杂度(最坏) | 时间复杂度(最好) | 空间复杂度 | 稳定性 | 重要程度 |
| 冒泡排序 | 比较类-交换排序 | O(n*2) | O(n*2) | O(n) | O(1) | 稳定 | |
| 快速排序 | 比较类-交换排序 | O(nlogN) | O(n*2) | O(nlogN) | O(nlogN) | 不稳定 | |
| 简单插入排序 | 比较类-插入排序 | O(n*2) | O(n*2) | O(n) | O(1) | 稳定 | |
| 希尔排序 | 比较类-插入排序 | O(n*1.3) | O(n*2) | O(n) | O(1) | 不稳定 | |
| 简单选择排序 | 比较类-选择排序 | O(n*2) | O(n*2) | O(n*2) | O(1) | 不稳定 | |
| 堆排序 | 比较类-选择排序 | O(nlogN) | O(nlogN) | O(nlogN) | O(1) | 不稳定 | |
| 归并排序 | 比较类-归并排序 | O(nlogN) | O(nlogN) | O(nlogN) | O(n) | 稳定 | |
| | | | | | | | |
| 计数排序 | 非比较类 | O(n+k) | O(n+k) | O(n+k) | O(n+k) | 稳定 | |
| 桶排序 | 非比较类 | O(n+k) | O(n**2) | O(n) | O(n+k) | 稳定 | |
| 基数排序 | 非比较类 | O(n*k) | O(n*k) | O(n*k) | O(n+k) | 稳定 | |

指标解释:

  • 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
  • 不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。
  • 时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。
  • 空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。

参考:

https://www.cnblogs.com/onepixel/p/7674659.html

相关推荐
聚客AI1 天前
🙋‍♀️Transformer训练与推理全流程:从输入处理到输出生成
人工智能·算法·llm
大怪v1 天前
前端:人工智能?我也会啊!来个花活,😎😎😎“自动驾驶”整起!
前端·javascript·算法
惯导马工1 天前
【论文导读】ORB-SLAM3:An Accurate Open-Source Library for Visual, Visual-Inertial and
深度学习·算法
骑自行车的码农1 天前
【React用到的一些算法】游标和栈
算法·react.js
博笙困了1 天前
AcWing学习——双指针算法
c++·算法
moonlifesudo1 天前
322:零钱兑换(三种方法)
算法
NAGNIP2 天前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
美团技术团队2 天前
LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
人工智能·算法
Fanxt_Ja2 天前
【LeetCode】算法详解#15 ---环形链表II
数据结构·算法·leetcode·链表
侃侃_天下2 天前
最终的信号类
开发语言·c++·算法