排序算法总结

基于比较的排序算法 <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)
posted @ 2023-04-16 00:41  lidongdongdong~  阅读(11)  评论(0编辑  收藏  举报