【自考】算法——时间复杂度汇总

        整理了自考《数据结构》中的所有时间复杂度,制作了如下几张表,便于对比和记忆,请笑纳。

 

 

时间复杂度

顺序表

单链表

 

求表长

O(1)

-

 

读表元素

O(1)

O(n)

 

定位

O(n)

O(n)

 

插入

O(n)

O(n)

 

删除

O(n)

O(n)

 

~深度优先搜索(邻接表)O(n+e)
深度优先搜索(邻接矩阵)O(n2)
~拓扑排序O(n+e)
查找表二分查找法O(log2n)

 

排序算法

直接插入

冒泡排序

快速排序

直接选择

堆排序

二路归并

时间复杂度

O(n2)

最好O(n)|O(n2)

平均O(nlog2n)|最坏O(n2)

O(n2)

O(nlog2n)

O(nlog2n)

稳定性

稳定

稳定

不稳定

不稳定

不稳定

稳定

 

        常见时间复杂度排序:

         O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(Cn)(指数阶)

 

        时间复杂度,填空和选择会有不少于8分的题目。除了上述书中列出的,还有给一小段程序,让自己计算的。

        时间复杂度的计算,从出题的规律来看,莫不是O(√n)、O(n)、O(log2n)、O(n2)、O(n3)这几种之一。

    除了按照常规方法计算基本运算的次数之外,考试中时间复杂度的题也很有规律性。

    1、看有几层循环,一层循环,是O(√n)或者O(log2n)或者O(n)两层循环,是O(n2);三层循环,是O(n3)。(一般规律如此,具体问题具体分析)

    2、一层循环中到底是哪一个,对照下面代码,很快就能总结出来。

    判断一下这几段程序的时间复杂度是多少?

1

for(i=1;i<=n;i++)
{
    m++;
    for(j=1;j<=n;j++)
        k*=m;
}

2、

for (i=1; i<=n; i++)
    for (j=1; j<=n; j++)
        for (k=1;k<=n;k++)
            x++;

3、

   i=0;s=0;
    while(s<n)
   { i++;
      s=s+i;
    }

4、

   i=0;s=0;
   while(i<n)
   { i++;
     s=s+i;
   }

5、

   i=1; 
   while(i<n)  
       i=i*2;

 

6、下边这是一个变种,看看它的时间复杂度是多少?

for ( int i=0; i<m; i++)
    for ( int j=0; j<n; j++)
        a[i][j]=i*j;

 

 

————————————————

答案:1、O(n2) 2、O(n3) 3、O(√n) 4、O(n) 5、O(log2n)6、O(mn)

你的答案对吗?

 

评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值