# 算法运行效率与时间复杂度 * **时间复杂度** > 使用表示算法运行的快慢 和 循环次数 > 1、时间复杂度=o(1) ```java print('Hello World!') ``` > 2、时间复杂度=o(n) ```java for(int i = 0; i < n; i++){ print('Hello World!') } ``` > 3、时间复杂度=o(n*m) ```java for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ print('Hello World!') } } ``` > **注意区分** > > 理解:**问题规模** > > 4、时间复杂度=o(1) ```java print('Hello World!') print('Hello Java!') print('Hello Zhang!') ``` > 5、时间复杂度=o(n2) ```java for(int i = 0; i < n; i++){ print('Hello Java!') for(int j = 0; j < m; j++){ print('Hello World!') } } ``` > 5、时间复杂度=o(log2 n) 或者 o(log n) ```java while(n>1){ print('Hello World!') n = n / 2 } ``` > 当n=64, 则输出为64、32、16、8、4、2 > > 由于26=64,则log64=6。 > > 以此类推:`n = n / 3` 为 o(log3 n) > > 以此类推:`n = n / 4` 为 o(log4 n) > > **总结**:只要问题规模出现**循环减半**情况,则使用**对数**描述时间复杂度; > > ​ 只要问题规模出现**多层循环**情况,则使用**次幂**描述时间复杂的。 --------- * **小结** > 时间复杂度是用来描述估计算法运行时间的一个式子(单位)。 > > **一般来说**,时间复杂度高的算法比复杂度低的算法慢。 > > 常见的时间复杂度排序(按效率排序 【主要:o(1) < o(log n) < o(n) 】) > > ​ o(1) < o(log n) < o(n) < o(n * log n) < o(n2) < o(n2 * log n) < o(n3)