@
changnet 你需要清楚,我没有说需要准备大量不确定的题的答案。这种问题质的评价,就是因为 OP 直接出的最水的一类的几乎没法更水的送分题(比较排序 naive(O^2)不 naive 的平均 O(n log n)),甚至因为结论过于容易被人死记硬背,而被许多人直球认为没资格做面试题。直接按这题的结果拒掉人,不太会怕误伤(至少比卡学历靠谱)。
如果这个层次的问题都要排除掉,那么算法差不多整个就不用问了(于是这人“熟练算法”也白写了,gg )。
你提出“这么多种”×3 ,说明你对这个入门领域的问题层次以及难度梯度也是几乎毫无感知,所以才会把差距离谱的不同要求混为一谈。
对一般开发者来说,这里的结论完全不需要刻意记。稍微瞄过点算法入门的,都知道排序的平均复杂度形式上实在“正常”得过分,基本就 O(n^2)和 O(n log n)这两个答案二选一。因此甚至都不需要知道快速排序是个啥算法,这名字一听就不 naive ,所以是 O(n log n)。
退一步讲,现场“常识”就能推断出比较排序下限不可能少于 O(n),掰指头算个 C(n,2)就该知道 naive O(n^2),然后中间补个最常见的 log 而已。除了 O 本身的定义,就是高中数学(甚至……小学奥数)。这很难吗?
(排序默认都指时间复杂度,空间另说,稍微没那么水。)
你之前有提出要求理解算法的“效率”。对渐进复杂度这么容易复读(不刻意背就自觉记住)的形式都不去强调的话,如何去要人理解更普遍抽象或实际更妖孽的问题(比如卡常)呢?
你所谓的灵活应用字面上就比这里的问题实在难了不知道几个层次。
对职业开发者来说,见识少还是一层问题,还容易学习培训弥补,而少根筋是更劝退的。
比如上面有人说调用别人东西不要在乎这种问题,这是完全忽略了他的用户(可能是最终用户,可能是调用他的工作的开发者)的感受——他觉得锅全是他调用的,所以不管,顺手当做不存在实际直接甩给用户了。用户:exm ???