news 2026/4/23 14:47:56

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/4/23 3:41:33

面向 K8s 1.33 的 Linux 服务器深度运维实战(CentOS/RedHat/Ubuntu 通用)

作为 10 年经验的运维专家&#xff0c;你关注的内核调优、系统裁剪、安全加固是支撑 K8s 集群&#xff08;1000 服务器 / 50 边缘节点&#xff09;稳定运行的核心&#xff0c;我会用「技术逻辑→操作步骤→工业级案例」的结构&#xff0c;全程说人话&#xff0c;兼容 K8s 1.3…

作者头像 李华
网站建设 2026/4/17 19:35:08

大数据领域Kappa架构:全面解析与应用场景

大数据领域Kappa架构&#xff1a;全面解析与应用场景 关键词&#xff1a;大数据、Kappa架构、流处理、批处理、应用场景、数据架构、实时分析 摘要&#xff1a;本文深入剖析大数据领域的Kappa架构&#xff0c;从概念基础出发&#xff0c;回顾其发展历史&#xff0c;明确问题空间…

作者头像 李华
网站建设 2026/4/23 12:57:39

第四章 孟德尔遗传

第五章连锁遗传和性连锁第六章染色体变异第七章细菌和病毒的遗传第八章基因的表达与调控第九章基因工程和基因组学第十章基因突变第十一章细胞质遗传第十二章遗传与发育第十三章数量性状遗传第十四章群体遗传与进化

作者头像 李华
网站建设 2026/4/23 11:12:39

第九章 基因工程和基因组学

第十章基因突变第十一章细胞质遗传第十二章遗传与发育第十三章数量性状遗传第十四章群体遗传与进化

作者头像 李华
网站建设 2026/4/23 11:12:28

沃虎音频隔离变压器:专业级抗干扰方案,守护纯净音质

在音频设备调试与部署中&#xff0c;信号干扰导致的杂音、交流声等问题&#xff0c;往往成为影响音质体验的“顽疾”。音频变压器作为音频信号传输与处理的核心器件&#xff0c;其性能直接决定信号传输质量。沃虎电子推出的专业级音频隔离变压器&#xff0c;凭借精准的阻抗匹配…

作者头像 李华