冒泡排序, 冒泡排序的时间复杂度为 o(n^2), 稳定性为 看判断是否有带=号,有的话,就不稳定,因为会交换位置,不加的话,就是稳定的。
快速排序
快速排序算法
1、时间复杂度是 nlogn 最坏的情况是 O(n^2) 2、空间复杂度:O(n) 3、稳定性:不稳定 4、快排和归并的对比: (1)归并排序的处理过程是由下到上,先处理子问题,然后再合并。 (2)快排其实就是从上到下,先分区,在处理子问题,不用合并。 其优化就是优化基准数, 提供一个三个数中间的思路
排序名词 |
时间复杂度 |
是否稳定 |
额外空间开销 |
插入排序 |
O(n^2) |
稳定 |
O(1) |
冒泡排序 |
O(n^2) | 稳定 | O(1) |
选择排序 |
O(n^2) | 不稳定 |
O(1) |
希尔排序 |
O(n^2) | 不稳定 | O(1) |
归并排序 |
O(nlogn) |
稳定 |
O(n) |
快速排序 |
O(nlogn) |
不稳定 |
O(1) |
这么多排序,如何选择
1、分析场景:稳定 or 不稳定
2、数据量:数据量小的时候选什么?比如就50个数, 优选 插入(5000*5000 = 25000000)
3、分析空间:
综上所述:没有一个固定的排序算法, 都是根据情况分析的, 但是如果你不会分析的情况下, 选择归并或者快排
4、 C++ qsort 快排+插入排序
5、jdk 里面有个arrays.sort 一种是基础类型, int double 用的快排, 对象排序, 用到的是归并 + timeSort