排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。
这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素, 这种方式,要在同一台计算机的相同状态下运行,才能比较那个算法速度更快。
通过分析某个算法的时间复杂度来判断哪个算法更优.
一句话,时间频度与语句执行次数成正比。
时间频度:一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。
随着n增大,忽略常数项,忽略低次项,忽略系数
有一个辅助函数f(n), f(n)是T(n)的同数量级函数,记为T(n)=O(f(n) )。
计算时间复杂度的方法:
常数阶O(1)
对数阶O(log_2n)
线性阶O(n)
线性对数阶O(nlog2n)
平方阶O(n^2)
立方阶O(n^3)
k次方阶O(n^k)
指数阶O(2^n)
说明:
常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)< Ο(nk) <Ο(2n) ,随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。
常数阶O(1)
无论代码执行了多少行,只要是没有循环等复杂结构,那这个代码的时间复杂度就都是O(1)
上述代码在执行的时候,它消耗的时间并不随着某个变量的增长而增长,那么无论这类代码有多长,即使有几万几十万行,都可以用O(1)来表示它的时间复杂度。
对数阶O(log2n)
说明:在while循环里面,每次都将 i 乘以 2,乘完之后,i 距离 n 就越来越近了。假设循环x次之后,i 就大于 2 了,此时这个循环就退出了,也就是说 2 的 x 次方等于 n,那么 x = log2n也就是说当循环log2n 次以后,这个代码就结束了。因此这个代码的时间复杂度为:O(log2n) 。 O(log2n)的这个2时间上是根据代码变化的,i= i* 3 ,则是O(log3n).
说明:这段代码,for循环里面的代码会执行n遍,因此它消耗的时间是随着n的变化而变化的,因此这类代码都可以用O(n)来表示它的时间复杂度
线性对数阶O(nlogN)
说明:线性对数阶O(nlogN) 其实非常容易理解,将时间复杂度为O(logn)的代码循环N遍的话,那么它的时间复杂度就是n *O(logN),也就是了O(nlogN)
平方阶O(n2)
说明:平方阶O(n2) 就更容易理解了,如果把 O(n) 的代码再嵌套循环一遍,它的时间复杂度就是O(n2),这段代码其实就是嵌套了2层n循环,它的时间复杂度就是O(nn),即 O(n2) 如果将其中一层循环的n改成m,那它的时间复杂度就变成了O(mn)
原文:https://www.cnblogs.com/benjieqiang/p/11397067.html