排序算法中,常常要求我们估算出最坏情况运行时间平均情况/期望运行时间。在估算运行时间时,我们常用到下面一些时间量:

 1  大部分程序的大部分指令之执行一次,或者最多几次。如果一个程序的所有指令都具有这样的性质,我们说这个程序的执行时间是常数。
 logN   如果一个程序的运行时间是对数级的,则随着N的增大程序会渐渐慢下来,如果一个程序将一个大的问题分解成一系列更小的问题,每一步都将问题的规 模缩减成几分之一 ,一般就会出现这样的运行时间函数。在我们所关心的范围内,可以认为运行时间小于一个大的常数。对数的基数会影响这个常数,但改变不会太 大:当N=1000时,如果基数是10,logN等于3;如果基数是2,logN约等于10.当N=1 00 000,logN只是前值的两倍。当N时原来的两倍,logN只增长了一个常数因子:仅当从N增长到N平方时,logN才会增长到原来的两倍。
 N  如果程序的运行时间的线性的,很可能是这样的情况:对每个输入的元素都做了少量的处理。当N=1 000 000时,运行时间大概也就是这个数值;当N增长到原来的两倍时,运行时间大概也增长到原来的两倍。如果一个算法必须处理N个输入(或者产生N个输出), 那么这种情况是最优的。
 NlogN  如果某个算法将问题分解成更小的子问题,独立地解决各个子问题,最后将结果综合起来 (如归并排序,堆排序),运行时间一般就是NlogN。我们找不到一个更好的形容, 就暂且将这样的算法运行时间叫做NlogN。当N=1 000 000时,NlogN大约是20 000 000。当N增长到原来的两倍,运行时间超过原来的两倍,但超过不是太多。
 
N平方
 如果一个算法的运行时间是二次的(quadratic),那么它一般只能用于一些规模较小的问题。这样的运行时间通常存在于需要处理每一对输入 数据项的算法(在程序中很可能表现为一个嵌套循环)中,当N=1000时,运行时间是1 000 000;如果N增长到原来的两倍,则运行时间将增长到原来的四倍。
 N三次方  类似的,如果一个算法需要处理输入数据想的三元组(很可能表现为三重嵌套循环),其运行时间一般就是三次的,只能用于一些规模较小的问题。当N=100时,运行时间就是1 000 000;如果N增长到原来的两倍,运行时间将会增长到原来的八倍。
 2的N次方  如果一个算法的运行时间是指数级的(exponential),一般它很难在实践中使用,即使这样的算法通常是对问题的直接求解。当N=20时,运行时间是1 000 000;如果增长到原来的两倍时,运行时间将是原时间的平方!

常见排序算法运行时间比较:

算法 最坏情况运行时间 平均情况/期望运行时间
插入算法 O(n^2) O(n^2)
快速排序 O(n^2) O(nlogn)【期望】
归并排序 O(nlogn) O(nlogn)
堆排序 O(nlogn) O(1)
希尔排序 O(n^2) O(n^(3/2))
桶排序 O(n^2) O(n)【平均情况】

1KB=2^10=1024

1MB=2^20=2^10*2^10=1024*1024约等于1 000 000(百万)

1GB=2^30=2^10*2^10*2^10=1024*1024*1024约等于1 000 000 000 (十亿)

算法运行时间1、logN、N、NlogN 、N^2、N^3、2^n之间的比较相关推荐

  1. 算法复杂度O(1),O(n),O(logn),O(nlogn)的区别

    算法复杂度分为时间复杂度和空间复杂度: 时间复杂度是指执行这个算法所需要的计算工作量 空间复杂度是指执行这个算法所需要的内存空间 1.对于一个循环,假设循环体的时间复杂度为 O(n),循环次数为 n, ...

  2. 算法复杂度 O(1),O(n),O(logn),O(nlogn)的区别

    算法复杂度分为时间复杂度和空间复杂度 时间复杂度是指执行这个算法所需要的计算工作量 空间复杂度是指这个算法所需要的内存空间 1.对于一个循环,假设循环体的时间复杂度为O(n),循环次数为n,则这个循环 ...

  3. 一文带你了解算法复杂度O(1),O(n),O(logn),O(nlogn)的含义

    详解O(1),O(n),O(logn),O(nlogn)的区别 相信很多开发的同伴们在研究算法.排序的时候经常会碰到O(1),O(n),O(logn),O(nlogn)这些复杂度,看到这里就会有个疑惑 ...

  4. 时间复杂度O(1) O(n) O(logn) O(nlogn)是什么意思?

    在你渐渐迷失在你的人生道路上的时候,千万不要因为走的太久,而忘记了我们为什么出发,做码农,也要清楚自己如何才能用有效的土地种植出 出色的产品,于是细节就需要把握一下. 如果你有兴趣可以关注一下公众号 ...

  5. 时间复杂度,O(1), O(n), O(logn), O(nlogn) 的区别+样例分析

    在描述算法复杂度时,经常用到O(1),O(n),O(logn),O(nlogn)O(1), O(n), O(logn), O(nlogn)O(1),O(n),O(logn),O(nlogn)来表示对应 ...

  6. 时间复杂度与O(1), O(n), O(logn), O(nlogn) 的区别

    在描述算法复杂度时,经常用到O ( 1 ) , O ( n ) , O ( l o g n ) , O ( n l o g n ) O(1), O(n), O(logn), O(nlogn)O(1), ...

  7. O(1), O(n), O(logn), O(nlogn) 的区别(转自ted 常)

    在描述算法复杂度时,经常用到O(1), O(n), O(logn), O(nlogn)来表示对应复杂度程度, 不过目前大家默认也通过这几个方式表示空间复杂度 . 那么,O(1), O(n), O(lo ...

  8. 时间复杂度 O(1),O(n),O(n^2),O(logn),O(nlogn) 详解

    在描述算法复杂度时,经常用到O(1), O(n),O(n^2), O(logn), O(nlogn)来表示对应算法的时间复杂度, 下面解释下他们的含义: 这是算法的时空复杂度的表示.不仅仅用于表示时间 ...

  9. 《转载》o(1), o(n), o(logn), o(nlogn) 是什么含义?

    2019年05月09日 在描述算法复杂度时,经常用到o(1), o(n), o(logn), o(nlogn)来表示对应算法的时间复杂度, 这里进行归纳一下它们代表的含义: 这是算法的时空复杂度的表示 ...

最新文章

  1. NFS服务器设置及mount命令挂载
  2. 点击 UITableView 隐藏键盘
  3. 利用python进行数据分析第二版pdf百度云_参考《利用Python进行数据分析(第二版)》高清中文PDF+高清英文PDF+源代码...
  4. 必须Mark下,2019 年度中国质量协会质量技术优秀奖
  5. 瑞星对Windows7捆绑杀毒软件等消息的回应
  6. Android ListView常用用法(二)
  7. PHP Cookbook读书笔记 – 第17章图形
  8. Spark入门案例--出租车数据分析
  9. SpringBoot-项目2-收货地址(新增,修改,删除,设为默认收货地址)
  10. 机器学习算法——GBDT
  11. Windows消息钩子[键盘监控]
  12. 搜狗收录提交入口之搜狗泛目录实现
  13. SQL中进行去重的方法
  14. 计算机uc,UC浏览器
  15. Python 架设网站
  16. vscode远程连接服务器操作方法
  17. 19 | 三方协议怎么签?
  18. 码率控制(二):CRF详解
  19. 栅格地图中自由区域之Bresenham算法及个人搜索算法对比
  20. 40.微信小程序(API--基础、路由、缓存、媒体)

热门文章

  1. cs231n笔记阅读
  2. 写C#代码时用到的中文简体字 、繁体字 对应的转化 (收藏吧)
  3. 微信小程序 错题记事本 111111
  4. cycleGAN网络风格迁移,将黑夜转变成白天,低照度图像复原
  5. 研一学习笔记-小白NLP入门学习笔记
  6. [网络编程]InetAddress类的实例化
  7. DedeCms织梦 tag标签静态化-教程
  8. php格式是什么文件》,php是什么文件(php是什么文件格式?)
  9. 干测试三年,我对数据库那可是一脸懵逼!
  10. vulnhub-kir-Ctf