【自考】时间复杂度—数据结构导论

本文介绍了自考数据结构中时间复杂度的重要性,提供了理解时间复杂度的概念,通过找规律的方式帮助记忆不同算法的时间复杂度,如排序算法中的直接插入排序和快速排序,并列举了常见的时间复杂度分类,旨在帮助考生更好地掌握这一知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    自考数据结构导论中,关于时间复杂度的题大概占到10分左右。简单的是给一个程序,让你看这个程序的时间复杂的。本人感觉比较难的就是直接问你一个算法的时间复杂度,因为算法的时间复杂度‘记’起来有点蒙啊!

 

     排序算法复杂度表:

        


    既然‘记’不住,那就想办法让自己加深印象呗!

     1、时间复杂度的概念:

         时间复杂度是指执行算法所需要的计算工作量。通俗的说也就是程序执行完毕运行的次数。

     2、找规律:

        容易计算的方法是:看看有几重for循环,只有一重则时间复杂度为O(n),二重则为O(n^2),依此类推,如果有二分则为O(logn),二分例如

快速幂、二分查找,如果一个for循环套一个二分,那么时间复杂度则为O(nlogn)。

    3、扩展知识:

        循环的语句有:for  while  do  while

        二分:分两种或几种情况去运算。

 

    排序分析、验证规律

    直接插入排序:


void  StraightInsertSort (List R、int n)
 {int i,j;
  for(i=2;i<=n;i++)
    {R[0] = R[i];
     j = i-1;

     while (R[0].key<R[j].key)
	{ R[j+1]=R[j];
	  j--;
	}
     R[j+1]=R[0];
     }
 }


  for 循环中嵌套这 while循环 ,所以 直接插入排序的时间复杂度是On^2;

 

  快速排序:

  

void Qsort(int a[], int low, int high)
{
    if(low >= high)
    {
        return;
    }
    int first = low;
    int last = high;
    int key = a[first];/*用字表的第一个记录作为枢轴*/
 
    while(first < last)
    {
        while(first < last && a[last] >= key)
        {
            --last;
        }
 
        a[first] = a[last];/*将比第一个小的移到低端*/
 
        while(first < last && a[first] <= key)
        {
            ++first;
        }
         
        a[last] = a[first];    
/*将比第一个大的移到高端*/
    }
    a[first] = key;/*枢轴记录到位*/
    Qsort(a, low, first-1);
    Qsort(a, first+1, high);


while循环中嵌套这两个while语句,也就是分成22中情况,所以快速排序的时间复杂度为O(nlog2n)(2为底n的对数)

 

    时间复杂度分类:

按数量级递增排列,常见的时间复杂度有:

常数阶O(1),对数阶O(log2n),线性阶O(n),

线性对数阶O(nlog2n),平方阶O(n^2),立方阶O(n^3),...,

k次方阶O(n^k),指数阶O(2^n)。随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。

    总结:关于时间复杂的的详解点我!  自己是在巨人的基础上加了点自己的理解,如果有不合适的地方,欢迎大神留言交流!

评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值