L1 估算复杂度 排序 模拟

估算复杂度
  1. 关于时间复杂度
    可以估计:电脑一秒之内执行1亿次运算。
    根据经验,如果时间复杂度算出来在2000w 以下,一般可以认为 1s 之内能跑出来;20亿以上考虑换一个算法。

  2. 关于空间复杂度
    爆空间(MLE)会喜提零分
    在递归的函数里乱开数组可能会爆空间(开全局变量啊)

排序
  • 需要注意依据 n 的大小来选择排序方法,PS 如果n>1000,就别想简单排序(2.3.4)了
  • 基于比较的排序算法,最快 O(nlogn)(桶排序不基于比较)
  1. 桶排序(计数排序)(值域很大时不能用)
    · 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;
}

  1. 选择排序
    · 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("
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值