| 基于比较的排序算法 <E extends Comparable<E>> |
| |
| 排序的稳定:排序前相等的两个元素,排序后相对位置不变(元素交换位置如果是跳跃交换,就有可能造成不稳定) |
| 可以试着想想排序算法对 [0, 1, 1, 0] 是如何排序的 |
| 1、如果元素只有一个域,稳定性没有意义 |
| 2、不依赖排序算法的稳定性,通过定义明确比较方式也可是实现稳定的排序 |
| 有没有可能包含有大量重复的元素? |
| 是否大部分数据距离它正确的位置很近?是否近乎有序? |
| 是否数据的取值范围非常有限?比如对学生成绩排序 |
| 是否需要稳定排序? |
| 否是使用链表存储的? |
| 数据的大小是否可以装载在内存里? |
序号 |
排序算法 |
时间复杂度 |
空间复杂度 |
特殊数据 |
其他 |
稳定性 |
1 |
选择排序 |
O(N^2) |
O(1) |
|
|
× |
2 |
插入排序 |
O(N^2) |
O(1) |
完全有序,时间 O(N) |
|
✓ |
3 |
冒泡排序 |
O(N^2) |
O(1) |
完全有序,时间 O(N) |
|
✓ |
4 |
归并排序 |
O(N * logN) |
O(N) |
完全有序,时间 O(N) |
O(N * logN) 求解数组逆序对个数 |
✓ |
5 |
快速排序 |
O(N * logN) |
O(1) |
含有相同元素数组,三路快排 O(N) |
O(N) 求解 SelectK、TopK 问题 |
× |
6 |
堆排序法 |
O(N * logN) |
O(1) |
|
堆、优先队列、O(N * logK) 求解 TopK |
× |
7 |
希尔排序 |
O(N * logN) ~ O(N^2) |
O(1) |
|
分组的思想 |
× |
8 |
计数排序 |
O(N + R) |
O(N + R) |
|
|
✓ |
9 |
LSD |
O(W * (N + R)) => O(N) |
O(N + R) |
|
|
✓ |
10 |
MSD |
O(W * (N + R)) => O(N) |
O(N + R) |
|
|
✓ |
11 |
桶排序 |
O(CN) |
O(N) |
|
|
✓ |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步