我只是不明白,为什么时间复杂度是O(n ^ 2)而不是O(n * logn)? 第二个循环每次递增2,所以不是O(logn)吗?
void f3(int n){
int i,j,s=100;
int* ar = (int*)malloc(s*sizeof(int));
for(i=0; i<n; i++){
s=0;
for(j=0; j<n; j+=2){
s+=j;
printf("%d\n", s);
}
free(ar);
}
答案 0 :(得分:8)
通过递增2,而不是递增1,您正在执行以下N*N*(1/2)
。使用big(O)表示法时,您无需关心常量,因此它仍然是N * N。这是因为big(O)表示的是算法增长的复杂性。
答案 1 :(得分:0)
外循环将执行n次,并且每次外循环迭代都会执行n / 2次,因为j + = 2
Order = n×n / 2 = n ^ 2/2 = O(n ^ 2),因为常量不会影响大n的运行时间
答案 2 :(得分:-1)
增量为2,因此循环将运行n / 2,因此复杂度将为n * n / 2。 如果GP中发生了激怒,如2