估算复杂度
-
关于时间复杂度
可以估计:电脑一秒之内执行1亿次运算。
根据经验,如果时间复杂度算出来在2000w 以下,一般可以认为 1s 之内能跑出来;20亿以上考虑换一个算法。 -
关于空间复杂度
爆空间(MLE)会喜提零分
在递归的函数里乱开数组可能会爆空间(开全局变量啊)
排序
- 需要注意依据 n 的大小来选择排序方法,PS 如果n>1000,就别想简单排序(2.3.4)了
- 基于比较的排序算法,最快 O(nlogn)(桶排序不基于比较)
- 桶排序(计数排序)(值域很大时不能用)
· BucketSort
· 时间复杂度 O(n+值域) 空间复杂度O(值域)
#include <iostream>
using namespace std;
//输入n个0~1000之间的整数,排序
int main()
{
int n, k, a[10001]={
0};
cin >> n;
for(int i=0; i<n; i++)
{
cin >> k;
a[k]++;
}
//从小到大
for(int i=0; i<=1000; i++)
for(int j=0; j<a[i]; j++)
cout << i << ' ';
cout << endl;
//从大到小
for(int i=1000; i>=0; i--)
for(int j=0; j<a[i]; j++)
cout << i << ' ';
return 0;
}
- 选择排序
· SelectSort
· 时间复杂度 O(n²) 空间复杂度O(1)
#include <bits/stdc++.h>
using namespace std;
int a[10]={
2, 5, 3, 1, 4};
int n=5;
int main()
{
for(int i=0; i<n; i++){
int x=i;
for(int j=i; j<n; j++)
if(a[x]>a[j])
swap(a[j], a[x]);
for(int j=0; j<n; j++)
cout<<a[j]<<' ';
puts("