常见的时间复杂度
常数阶 O(1) 顺序语句
int sum = 0, n = 100; sum = (1+n)*n/2;
线性阶 O(n) FOR循环
int i, sum = 0, n = 100; for( i=1; i <= n; i++ ) { sum = sum + i; }
平方阶 O(n^2) 嵌套的FOR循环
int i, j, x=0, sum=0, n=100; for( i=1; i <= n; i++ ) { for( j=1; j <= n; j++ ) { x++; sum = sum + x; } }
int factorial(int n) { if(n <= 1) { return 1; } else { return n*factorial(n-1); } }
对数阶 O(logn)
int i = 1, n = 100; while( i < n ) { i = i * 2; }
nlogn阶 O(nlogn)
立方阶 O(n^3)
指数阶 O(2^n)
常用的时间复杂度消耗的时间从小到大以此是O(1) < O(logn) < (n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
请给出一下代码的时间复杂度
int factorial(int n) { if(n <= 1) { return 1; } else { return factorial(n-1)*factorial(n-2); } }
n++; function(n); for(i=0; i < n; i++) { function(i); } for(i=0; i < n; i++) { for(j=i; j < n; j++) { printf(“%d”, j); } } void function(int count) { int j; for(j=count; j < n; j++) { printf(“%d”, j); } }
int i, j, x=0, sum=0, n=100; for( i=1; i <= n; i++ ) { for( j=i; j <= n; j++ ) { x++; sum = sum + x; } }