10.23复杂度解析 23-5-8数据结构初阶

文章介绍了几种常见算法的时间和空间复杂度,包括冒泡排序的时间复杂度为O(N^2),二分查找的时间复杂度为O(logN),以及两种不同的斐波那契数列计算方法,一种具有O(N^2)复杂度,另一种为O(N)。同时,讨论了空间复杂度,如冒泡排序和斐波那契数列计算中的额外空间需求。
摘要由CSDN通过智能技术生成

时间复杂度和空间复杂度
大O的渐进表示法 for循环O(n)

冒泡排序时间复杂度O(N^2)
N-1+N-2+N-3…+1

void Bubblesort(int* a, int n)
{
    assert(a);
    for (size_t end = n; end > 0; --end)
    {
        int exchange = 0;
        for (size_t i=l; i < end; ++i)
        {
             if (a[i-l] > a[i])
            {
                swap(&a[i-1],&a[i]);
                exchange = 1;
            }
            
        }
       if(exchange==0)
        break;
    }
}

二分查找O(logN)
(查找真正会用的是红黑树,哈希表,B树,跳表)

int BinarySearch(int* a, int n,int x)
{
    assert(a);
    int begin = 0;
    int end = n-l;
    while (begin <= end)
    {
         int mid = begin + ((end-begin)>>1);
        if(a[mid] < x)
            begin = mid+1;
        else if (a[mid]>x)
            end = mid-1;
        e1se
            return mid;
    }
    return -1;
}

O(n^2)等差数列和

long long Fac(size_t N) 
{
    if(0== N)
        return 1;
    for (size_t i=0;i<N;++i)
    {
        //...
    }
    return Fac(N - 1)*N;
}

O(N)

long 1ong Fac(size_t N)
{
    if (0==N)
        return 1;
    return Fac(N-1)*N;
}

空间复杂度

不是占用byte空间多少,是变量的个数
算法中临时(额外)占用空间的大小

冒泡排序end exchange i 三个变量
O(i)

fib斐波那契(N+1)个
O(N)

long long* Fibonacci(size_t n)
{
    if(n==0)
        return NULL;
    long long*fibArray =(long long *)malloc((n+1)* sizeof(long long));
    fibArray[0] =0;
    fibArray[1] =1;
    for (int i=2;i<= n ;++i)
    {        
        fibArray[i]= fibArray[i- 1]+ fibArray [i- 2];
    }
    return fibArray;
}

longlong(N=0)
O(n)
冒泡排序n个栈帧(每里个常数个的变量)

long long Fac(size_t N)
{
    if(N ==0)
    return 1;
    return Fac(N-1)*N;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值