1. 分析普通情况下的时间复杂度/空间复杂度

①普通情况下的时间复杂度:

          首先要知道,我们一般用O渐进来表示算法的时间复杂度,在计算时首先要算出算法语句的总执行次数,例如下面这个函数。

void Test(int n)
{
 int iCount = 0;
 for(int i = 0;i<n;i++)
 {
  for(int j=0;j<n;++j)    //两个for循环嵌套,执行n^2次
  {
   iCount++;
  }
 }
 for(int k=0;k<2*n;++k)     //一个for循环,执行2n次
 {
  iCount++;
 }
 int count =10;             //执行10次
 while(count--)
 {
  iCount++;
 }
}
上面这个函数中,语句一共执行了n^2+2n+10次,再根据时间复杂度的算法,先将常数项置为1,再保留最高项的数,当最高项系数不为1时,将系数置为1,所以这个函数的时间复杂度为O(n^2).

   最差时间分析  平均时间复杂度 稳定度     空间复杂度  
冒泡排序   
O(n2)   O(n2)       稳定        O(1
快速排序   
O(n2)   O(n*log2n)  不稳定  O(log2n)~O(n)    
选择排序   
O(n2)   O(n2)       稳定      O(1)   
二叉树排序 
O(n2) O(n*log2n)    不稳定     O(n)    
插入排序   
O(n2)   O(n2)       稳定      O(1)   
堆排序
O(n*log2n) O(n*log2n)   不稳定     O(1)   
希尔排序   
O        O          不稳定     O(1)

②:普通情况下的空间复杂度

             空间复杂度就是函数中创建对象的个数关于问题规模函数表达式,一般情况用O的渐进表示法表示。

对于一个算法来说,空间复杂度和时间复杂度往往是相互影响的。当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间;反之,当追求一个较好的空间复杂度时,可能会使时间复杂度的性能变差,即可能导致占用较长的运行时间。

有时我们可以用空间来换取时间以达到目的。

猜你喜欢

转载自blog.csdn.net/qq_40200318/article/details/80437433
今日推荐