定义
排序算法是作用在数组之上的方法,目的是将乱序的数据按照升序或者逆序的规则排列好。
如何评价一个排序算法
评价排序算法,主要从三个维度进行分析
- 时间复杂度:包括最好、最坏、平均时间复杂度
- 空间复杂度:是否原地排序
- 稳定性:排序之后,相同元素原先的先后顺序保持不变
经典的排序算法
| 排序算法 | 时间复杂度(平均) | 空间复杂度(平均) | 稳定性 |
|---|---|---|---|
| 冒泡排序 | O(n2) | O(1) | 稳定 |
| 选择排序 | O(n2) | O(1) | 不稳定 |
| 插入排序 | O(n2) | O(1) | 稳定 |
| 归并排序 | O(nlogn) | O(n) | 稳定 |
| 快速排序 | O(nlogn) | O(1) | 不稳定 |
| 桶排序 | O(n) | O(n) | 稳定 |
| 基数排序 | O(n) | O(n) | 稳定 |
| 计数排序 | O(n) | O(n) | 稳定 |
以时间复杂度为维度,可以分为三类
| 时间复杂度 | 排序算法 |
|---|---|
| O(n2) | 冒泡、选择、插入排序 |
| O(nlogn) | 归并、快速排序 |
| O(n) | 桶、基数、计数排序 |
以空间复杂度为维度,可以分为两类
| 空间复杂度 | 排序算法 |
|---|---|
| O(1) | 冒泡、选择、插入、快速排序 |
| O(n) | 归并、桶、计数、基数排序 |
以稳定性为维度,可以分为两类
| 稳定性 | 排序算法 |
|---|---|
| 不稳定 | 选择、快速排序 |
| 稳定 | 其他 |