例1:
for(int i = 1;i<=n;i*=2)
{
      for(int j = 1;j<=n;j++)
                p--;
}
时间复杂度:O(n*log2n)
内层循环改为 <=i
时间复杂度:O(n2) 1+2+3...+n 等差数列前n项和
例二:
for(i = 1;i<=n;i++)
     for(j = 1;j<=i;j++)
          for(k = 1;k<=j;k++)
               p--;
时间复杂度:O(n3)
计算过程:
1+(1+2)+(1+2+3)+(1+2+3+...)+...+..(1+2+3+...+n)
i(i+1)/2 i从1到n 求和 n(n+1)(2n+1)/6 ???
递归的时间复杂度计算:递归的通式:T(n) = aT(n/b)+f(n) n为数据规模
例3:T(n) = 3T(n/4)+cn2
时间复杂度:O(n2)
例4:T(n) = 2T(n/2)+1
时间复杂度:O(n)
简便算法:直接算O(nlogba ) 和 f(n) 将这连个数比较 , 取结果大的一个
上面两个一样大的时候 结果为 O(nlogba * log2n)
名称       最好时间复杂度     平均时间复杂度     最坏时间复杂度   空间复杂度         稳定性 
冒泡                O(n)正序          O(n^2)                        O(n^2)逆序                          O(1)           稳定
简单选择          O(n^2)         O(n^2)                         O(n^2)                                O(1)            不稳定
插入排序          O(n)正序                     O(n^2)                       O(n^2)逆序                          O(1)           稳定
快排                O(n*log2 n)          O(n*log2 n)                 O(n^2)有序/逆序最坏    O(log2 n)                  不稳定
希尔(插入)      O(n)正序                         O(n的(1.2~1.5))      O(n^2)逆序                          O(1)           不稳定
归并(二路)      O(n*log2 n)                O(n*log2 n)               O(n*log2 n)                         O(n)           稳定
堆排(选择)           O(n*log2 n)               O(n*log2 n)     O(n*log2 n)                         O(1)           不稳定
基数排序          O(d*(n+r))                O(d*(n+r))                   O(d*(n+r))                          O(n+r)           稳定
注:
  空间复杂度 额外申请的空间 包括变量和动态申请的
  常量空间复杂度:如果我们额外申请的空间 不随着处理数据量的增大而增大 那么我们称这样的空间复杂度为常量空间复杂度记为O(1)
稳定:数值相等的两个元素 在排序前后其相对位置未发生改变
  基数排序最稳定  d------位数    r--------桶的个数
  别的排序可能受人的写法影响稳定性 
  归并排序  -----空间复杂度  如果申请了额外数组就是O(n)   没申请就是O(log2 n)
  堆排 
  建立初始堆------ S = 2^(k-2)*1+2^(k-3)*2+...+1*(k-1)  错位相减            ----------------- O(n)
  排序-------------  O(n*log2 n)
原文:https://www.cnblogs.com/Lune-Qiu/p/9158904.html