c++排序算法整理

当然这些都是废话直接sort多好。。。

 1 //放眼望去。。。好眼熟啊。。。
 2 //当然身为神犇大佬的你不希望自己渺小到只会用sort。。。
 3 #include<bits/stdc++.h>
 4 using namespace std;
 5 const int MAXN = 1e8 + 10;
 6 int n, a[MAXN];
 7 int main(){
 8     scanf("%d", &n);
 9     for (int i = 1;i <= n; i++) scanf("%d", &a[i]);
10     sort(a + 1, a + 1 + n);//<--!!!!!AC必备经典代码。。。。。
11     for (int i = 1;i <= n; i++) printf("%d ", a[i]); puts("");
12     return 0;

像上面这样简洁的代码难道不XIANG吗。。。(蒟蒻的心里话)

切入正题:

十种常见排序算法可以分为两大类:

比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 包括插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序和归并排序

非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。包括计数排序、桶排序和基数排序

算法时/空复杂度: 
插入排序:平均时间复杂度O(n^2),最坏时间复杂度O(n^2)),最好时间复杂度O(n),空间复杂度O(1)
希尔排序:平均时间复杂度O(n^1.3),最坏时间复杂度O(n^2),最好时间复杂度O(n),空间复杂度O(1)
选择排序:平均时间复杂度O(n^2),最坏时间复杂度O(n^2),最好时间复杂度O(n^2),空间复杂度O(1)
堆排序:平均时间复杂度O(log2n),最坏时间复杂度O(n log2 n),最好时间复杂度O(n log2 n),空间复杂度O(1)
冒泡排序:平均时间复杂度

上一篇:Python - os获取当前目录路径


下一篇:寻找写代码感觉(二)之 Spring Boot 项目属性配置