算法复杂度分为时间复杂度和空间复杂度。其做用: 时间复杂度时间复杂度是指执行算法所须要的计算工做量;而空间复杂度是指执行这个算法所须要的内存空间。算法的复杂性体运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间,即寄存器资源,所以复杂度分为时间和空间复杂度。java
描述一个算法所须要的空间大小,即占用的内部内存,或者外部的内存大小,目前的设备性能各方面发展较快,空间复杂度已经不是影响程序性能的主要因素。算法
时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个表明算法输入值的字符串的长度的函数。时间复杂度经常使用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的状况。函数
一个语句执行次数称为语句频度或时间频度,记为T(n)。算法花费的时间与算法中语句的执行次数成正比例,哪一个算法中语句执行次数多,它花费时间就多。性能
通常状况下,算法中基本操做重复执行的次数是问题规模n的某个函数,用T(n)表示,如有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f (n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记做T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度code
举个栗子:
blog
int sum = 0; int b = 100; for(int i = 0; i<= b;i++){ sum += i; } // T(n) = n+1 = 100+1 sum = (1+b)*b/2 //一样也能够计算出结果,可是T(n) = 1
简而言之,在T(n)=O(f(n))
中,当n趋近无穷大时,有 T(n)/f(n) = c
,极限值c是一个不为0 的常数,就叫 f(n) 是T(n)的同量级函数,若求得 f(n) = n ,则O(f(n)) =O(n)
.排序