news 2026/9/3 1:40:26

JavaScript 常见算法复杂度总结(大O表示法)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JavaScript 常见算法复杂度总结(大O表示法)

大O表示法具体含义总结表

时间复杂度详解

大O表示名称含义示例增长曲线执行时间(n=1000)假设
O(1)常数时间执行时间不随输入规模变化数组索引访问、哈希表查找水平线1单位时间
O(log n)对数时间执行时间随输入规模对数增长二分查找、平衡树操作缓慢上升曲线10单位时间
O(√n)平方根时间执行时间随输入规模的平方根增长某些数论算法、质数检查平缓上升31.6单位时间
O(n)线性时间执行时间与输入规模成正比数组遍历、线性搜索45°直线1000单位时间
O(n log n)线性对数时间执行时间 = n × log n高效排序算法(快速排序、归并排序)略高于线性10000单位时间
O(n²)二次时间执行时间与输入规模的平方成正比简单排序(冒泡、选择)、嵌套循环快速上升曲线1,000,000单位时间
O(n³)立方时间执行时间与输入规模的立方成正比三重嵌套循环、某些矩阵运算急剧上升1,000,000,000单位时间
O(2ⁿ)指数时间执行时间呈指数增长暴力破解、汉诺塔递归急剧爆炸增长1.07×10³⁰¹单位时间
O(n!)阶乘时间执行时间呈阶乘增长旅行商问题暴力解、全排列极端爆炸增长4×10²⁵⁶⁷单位时间

复杂度等级对比表

复杂度n=10n=100n=1000n=10000实用性
O(1)1111优秀
O(log n)3.36.61013.3优秀
O(√n)3.21031.6100良好
O(n)10100100010000良好
O(n log n)336649966132877可接受
O(n²)1001000010⁶10⁸小型数据可用
O(n³)100010⁶10⁹10¹²仅限极小数据
O(2ⁿ)10241.27×10³⁰巨大天文数字不可用
O(n!)36288009.33×10¹⁵⁷巨大天文数字完全不可用

空间复杂度详解

大O表示名称含义示例
O(1)常数空间算法使用固定大小的额外空间原地排序、简单变量
O(log n)对数空间额外空间随输入规模对数增长递归算法的调用栈(如快速排序)
O(n)线性空间额外空间与输入规模成正比创建新数组、哈希表存储
O(n log n)线性对数空间额外空间 = n × log n某些递归算法
O(n²)二次空间额外空间与输入规模的平方成正比创建二维数组、邻接矩阵

常见算法的具体数值含义

排序算法示例

// O(n²): 冒泡排序 for (let i = 0; i < n; i++) { // n次 for (let j = 0; j < n - i - 1; j++) { // 平均n/2次 // 比较操作: 总共 ≈ n²/2 次 } } // 实际执行次数: 约 0.5n² 次比较 // O(n log n): 快速排序 // 每次递归将数组分成两半: log n 层 // 每层处理所有元素: n 次操作 // 总操作: n × log n

搜索算法示例

// O(log n): 二分查找 // 每次将搜索范围减半 // 查找次数 = log₂n // 例如: n=1024 → 最多10次查找 // n=100万 → 最多20次查找 // O(n): 线性查找 // 最坏情况: 查找整个数组 // 查找次数 = n

实际性能参考表

操作数量级可接受算法复杂度1GHz CPU处理时间估计
n ≤ 100O(n³), O(2ⁿ) (小规模)< 1秒
100 < n ≤ 10,000O(n²)1秒 - 几分钟
10,000 < n ≤ 1,000,000O(n log n)几秒 - 几分钟
n > 1,000,000O(n), O(log n), O(1)几秒 - 几分钟
n > 10⁹O(log n), O(1)实时或近实时

重要注意事项

  1. 大O表示法忽略常数因子: O(100n) 仍写作 O(n)

  2. 关注最坏情况: 大O通常表示最坏情况复杂度

  3. 实际性能受多种因素影响:

    • 硬件性能

    • 编程语言效率

    • 算法具体实现

    • 输入数据的特性

  4. 复杂度对比的实际意义:

    • O(n) 比 O(n log n) 好10倍以上时,n通常 > 1000

    • O(log n) 在大数据时优势明显

    • 常数因子在n较小时可能起决定性作用


选择算法的指导原则

  1. n < 10: 简单算法即可,复杂度不重要

  2. 10 < n < 1000: 避免O(n³)和更差的算法

  3. 1000 < n < 10⁶: 优先选择O(n log n)或更好的算法

  4. n > 10⁶: 必须使用O(n)或更优算法


记住:大O表示法帮助我们理解算法随数据规模增长的趋势,但在实际开发中需要结合具体场景和性能测试来选择最合适的算法。


JavaScript 常见算法复杂度总结(大O表示法)

以下是JavaScript中常见算法的时间与空间复杂度总结:

时间复杂度表

算法类型最佳情况平均情况最坏情况常见示例
常数时间O(1)O(1)O(1)数组索引访问、对象属性访问
对数时间O(1)O(log n)O(log n)二分查找、平衡二叉搜索树操作
线性时间O(n)O(n)O(n)数组遍历、线性搜索
线性对数时间O(n)O(n log n)O(n log n)快速排序、归并排序、堆排序
二次时间O(n)O(n²)O(n²)冒泡排序、选择排序、插入排序
指数时间O(1)O(2ⁿ)O(2ⁿ)汉诺塔、斐波那契递归解法
阶乘时间O(1)O(n!)O(n!)旅行商问题暴力解法

空间复杂度表

算法类型空间复杂度描述
原地算法O(1)不使用额外空间或使用常量空间
线性空间O(n)额外空间与输入大小成正比
递归算法O(n)递归调用栈的空间消耗

JavaScript常见算法具体分析

1. 搜索算法

算法时间复杂度空间复杂度说明
线性搜索O(n)O(1)遍历数组查找元素
二分搜索O(log n)O(1)要求数组已排序
深度优先搜索(DFS)O(V+E)O(V)图/树遍历,V为顶点数,E为边数
广度优先搜索(BFS)O(V+E)O(V)图/树遍历

2. 排序算法

算法最佳平均最坏空间稳定性
冒泡排序O(n)O(n²)O(n²)O(1)稳定
选择排序O(n²)O(n²)O(n²)O(1)不稳定
插入排序O(n)O(n²)O(n²)O(1)稳定
归并排序O(n log n)O(n log n)O(n log n)O(n)稳定
快速排序O(n log n)O(n log n)O(n²)O(log n)不稳定
堆排序O(n log n)O(n log n)O(n log n)O(1)不稳定

3. 数据结构操作

数据结构访问搜索插入删除空间复杂度
数组O(1)O(n)O(n)O(n)O(n)
栈/队列O(n)O(n)O(1)O(1)O(n)
链表O(n)O(n)O(1)O(1)O(n)
哈希表O(1)*O(1)*O(1)*O(1)*O(n)
二叉搜索树O(log n)*O(log n)*O(log n)*O(log n)*O(n)

注:带号表示平均情况,最坏情况可能退化*


实际应用建议

  1. 小数据集(n < 100):简单算法(如冒泡排序)可能更合适

  2. 中型数据集(n < 10,000):使用O(n log n)算法如快速排序

  3. 大型数据集(n > 10,000):优先考虑O(n log n)或O(n)算法

  4. 内存敏感场景:选择原地算法(空间复杂度O(1))

  5. 需要稳定排序:选择归并排序或插入排序


JavaScript内置方法复杂度

方法时间复杂度说明
Array.prototype.push/popO(1)数组末尾操作
Array.prototype.shift/unshiftO(n)数组开头操作,需要重新索引
Array.prototype.sortO(n log n)V8引擎使用TimSort(归并+插入)
Array.prototype.includes/indexOfO(n)线性搜索
Array.prototype.sliceO(n)需要复制元素
Object.keys/values/entriesO(n)遍历对象属性

记住:大O表示法描述的是算法性能随输入规模增长的趋势,实际性能还受常数因子、硬件特性、JavaScript引擎优化等因素影响。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/30 12:17:34

java计算机毕业设计校园车辆门禁管理系统 高校智能车行闸机云平台的设计与实现 基于SpringBoot的校园车辆出入与收费一体化系统

计算机毕业设计校园车辆门禁管理系统8d42u9&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。校门早高峰堵成停车场、外来车蹭车位、临时车人工填单——传统纸质登记对讲机模式让保…

作者头像 李华
网站建设 2026/9/2 22:02:29

java计算机毕业设计校园畅聊交友平台的设计与实现 高校同频社交互动平台的设计与实现 基于SpringBoot的校园缘分速配与即时聊天系统

计算机毕业设计校园畅聊交友平台的设计与实现oytcz9&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。“下课十分钟&#xff0c;隔壁教室的志同道合在哪里&#xff1f;”——当校园…

作者头像 李华
网站建设 2026/9/2 22:50:17

百亿量化私募高薪急招C++,应届,社招都看春招/秋招/校招/社招,23/24/25/26届都可base北上杭深现招岗位:C++量化系统开发工程师年base40-80万+bonus通

百亿量化私募高薪急招C&#xff0c;应届&#xff0c;社招都看 春招/秋招/校招/社招&#xff0c;23/24/25/26届都可 base北上杭深 现招岗位:C量化系统开发工程师 年base40-80万bonus 通过这里找到我 slam_pan 工作职责 1. 参与交易平台的设计、开发与测试&#xff0c;实…

作者头像 李华
网站建设 2026/9/2 21:25:37

springboot基于java的教学辅助平台(11595)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告&#xff09;远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/9/2 21:21:33

附医华南医院助力市医协疼痛学科建设:受邀出席“广州市医师协会疼痛科医师分会成立大会暨首次学术会议” | 祝贺我院三位专家荣任要职

12月20日&#xff0c;广州附医华南医院三位专家应邀出席“广州市医师协会疼痛科医师分会成立大会暨首次学术会议”&#xff0c;积极参与学术交流&#xff0c;展示了医院在疼痛学科领域的专业影响与行业地位。本次大会选举中&#xff0c;广州附医华南医院专家团队荣获重要任职&a…

作者头像 李华
网站建设 2026/9/2 21:22:29

五城同庆!弘阳广场启动“山海奇境 新年新愿”大型主题营销活动

近日&#xff0c;弘阳集团宣布&#xff0c;旗下南京、常州、合肥、济南、安庆五座城市的弘阳广场&#xff0c;将于2025年12月中下旬至2026年1月上旬&#xff0c;联动推出以“山海奇境”与“新年新愿”为核心主题的系列大型节庆活动。此次活动横跨圣诞、跨年两大重要节点&#x…

作者头像 李华