一个数组只有100个元素时,随便写个双重循环排序,毫秒级响应。用户量涨到10000,同样的代码直接让服务器崩溃。这不是硬件问题,是时间复杂度选错了。
Big O Notation(大O表示法)是工程师在写第一行代码之前,用来预判性能的通用语言。它不测实际运行秒数,只回答一个核心问题:当输入规模n膨胀时,你的算法会怎么表现?
![]()
O(1):常数时间,与数据量无关
按索引取数组第一个元素,永远是1步操作。无论数组里有10个还是1000万个整数,耗时不变。这是哈希表查询、数组随机访问的底气。
Go代码示例:getFirst函数直接返回arr[0],标注为O(1)。
O(n):线性时间,随数据量正比增长
遍历整个数组找最大值,循环次数等于元素个数。n翻10倍,操作量翻10倍。这种可预测性让它成为大多数场景的安全选择——至少不会突然爆炸。
Go代码示例:findMax函数用单循环扫描,标注为O(n)。
O(n²):平方时间,规模杀手
嵌套循环是典型的n²结构。n=100时,1万次操作,眨眼完成。n=1000时,100万次操作,开始吃力。n=10000时,1亿次操作,用户已经关闭页面。
冒泡排序就是这种结构:外层循环n轮,内层循环n-i轮,总操作量逼近n²。教学演示可以,生产环境慎用。
Go代码示例:bubbleSort函数的双重循环,标注为O(n²)。
三种复杂度的实战边界很清晰:O(1)追求极致响应,O(n)承担常规流量,O(n²)仅限小数据量或离线任务。选错类别,功能在测试环境完美通过,上线即超时。
这篇文章只覆盖了最基础的三个。O(log n)和O(n log n)才是搜索和排序的工业级解法——二分查找、归并排序、快速排序都建在这之上。下一篇拆解。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.