O(n方) 有多慢
约 10 分钟
两层嵌套循环,外层跑 次、内层每次也跑 次,总操作约 ,记作 ,即"平方时间"。数据一大,它增长得很凶。
// 冒泡排序:典型 O(n^2)
for (int i = 0; i < n - 1; i++)
for (int j = 0; j < n - 1 - i; j++)
if (a[j] > a[j+1]) swap(a[j], a[j+1]);
时约 (一百万)次,还能接受;但 时就是 ,远超一秒能算的 ,必然超时。
冒泡、选择、插入排序,以及"两两配对枚举"都是 。判断能不能用它,直接看数据范围: 左右一般可以,上万就危险。坑:即便内层只跑半程(如上面的 n-1-i),总次数约 ,量级仍是 ,常数减半救不了,这时要想办法换成 或 的做法。
小纸条
O(n²) 的算法在 n=1000 时大约要多少次操作?
登录 后可看答案