①普通情况下的时间复杂度:
首先要知道,我们一般用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的渐进表示法表示。
对于一个算法来说,空间复杂度和时间复杂度往往是相互影响的。当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间;反之,当追求一个较好的空间复杂度时,可能会使时间复杂度的性能变差,即可能导致占用较长的运行时间。
有时我们可以用空间来换取时间以达到目的。