时间复杂度:用来评估算法运行效率的一个式子
先看下面栗子感受一下
Debug.log("ok");//0(1)
foreach (var item in collection)
{
Debug.log("ok");//0(1)
}//0(n)
foreach (var item in collection)
{
foreach (var item in collection)
{
Debug.log("ok");//0(1)
}//0(n)
}//0(n^2)
再看这个
foreach (var item in collection)
{
Debug.log("ok");//0(1)
foreach (var item in collection)
{
Debug.log("ok");//0(1)
}//0(n)
}
按道理来说应该是 (n+1)*n=n^2+n,但是其实还是o(n^2),因为时间复杂度只是估算,所以只取最高项,而且常数忽略,
比如3n^2+n+5=n^2
再看下面的
while (n>1)
{
Debug.log(n);//0(1)
n =n / 2;//0(1)
}
如果n=64,循环执行6次,也就是2^6=64,那么时间复杂度就是O(logn),记住了只要出现折半操作的循环,必定是对数时间复杂度,比如二叉树,快速排序等等
给个表
稳定性是指,相同元素排序后保持相对位置不变