常用的时间复杂度
常数阶\(O(1)\)
说明: 只要代码中没有复杂的循环条件,无论代码的函数是多少,一律为常数阶\(O(1)\)
int i=1;
int j=3;
int m=0;
m=i+j;
….
对数阶 \(O(log_2n)\)
说明: 存在循环体,在不考虑循环体的代码执行情况,该循环体本该执行n次,但是循环体将改变循环变量i的大小,每执行一次,i就扩到两倍,即i=i*2,这样就导致循环体会加速趋近终止条件n;假设经过x次后,退出循环体,则有\(2^x>=n\),因此,\(x=log_2n\);同理,当\(i=i*3时,x=log_3n\),退出循环的速度更快,时间复杂度更小。
while(i
i=i*2;
}
线性阶\(O(n)\)
说明: 存在循环体。循环体内代码执行的次数随着规模n的变化而变化,并且是线性变化
for(int i=0;i
int j=o;
j++;
}
线性对数阶\(O(nlog_2n)\)
说明: 将时间复杂度为\(O(log_2n)\)的代码重复执行n次,即为线性对数阶\(O(nlog_2n)\)
//n为一个固定的常数
//i和j均为循环变量
while(i
while(j
j=j*2;