排序算法总结
基于比较的排序算法 <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) | ✓ |
本文来自博客园,作者:lidongdongdong~,转载请注明原文链接:https://www.cnblogs.com/lidong422339/p/17322405.html