前言
排序算法作为算法中较为基础的一部分,在大厂算法面试中的出现频率较高,本系列文章将以十大常见的排序算法为例,带大家逐步了解排序算法。
排序算法分类
十种常见排序算法可以分为两大类:
- 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破 ,因此也称为非线性时间比较类排序。
- 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。
graph LR
排序算法 --> 比较类排序
排序算法 --> 非比较类排序
比较类排序 --> 交换排序
交换排序 --> 冒泡排序
交换排序 --> 快速排序
比较类排序 --> 插入排序
插入排序 --> 简单插入排序
插入排序 --> 希尔排序
比较类排序 --> 选择排序
选择排序 --> 简单选择排序
选择排序 --> 堆排序
比较类排序 --> 归并排序
归并排序 --> 二路归并排序
归并排序 --> 多路归并排序
非比较类排序 --> 计数排序
非比较类排序 --> 桶排序
非比较类排序 --> 基数排序
排序算法复杂度
| 排序方法 | 时间复杂度(平均) | 时间复杂度(最坏) | 时间复杂度(最好) | 空间复杂度 | 稳定性 |
|---|---|---|---|---|---|
| 插入排序 | 稳定 | ||||
| 希尔排序 | 不稳定 | ||||
| 选择排序 | 不稳定 | ||||
| 堆排序 | 不稳定 | ||||
| 冒泡排序 | 稳定 | ||||
| 快速排序 | 不稳定 | ||||
| 归并排序 | 稳定 | ||||
| 计数排序 | 稳定 | ||||
| 桶排序 | 稳定 | ||||
| 基数排序 | 稳定 |
① 时间复杂度:当 n(排序的数量)变化时,计算机的操作次数呈现的规律
② 空间复杂度:当 n 变化时,计算机内执行时所需的储存空间大小呈现3的规律
③ 稳定性:排序过程中,若如果比较的两个数相等,且排序后这两个数的前后顺序可能发生变动,则算法是不稳定的;反之则是稳定的。