阮一峰老师又被人怼了,这次是关于 JavaScript 的快速排序实现

2018-05-11 13:43:34 +08:00
 cairnechen
起因是 ideawu 发微博吐槽几乎所有的前端面试者的快排实现都是阮一峰的错误版本。

v 友们怎么看这个问题?

完整分析见 https://juejin.im/post/5af4902a6fb9a07abf728c40
36221 次点击
所在节点    JavaScript
194 条回复
wizardoz
2018-05-11 14:19:16 +08:00
@EmbraceZ 怎么优化也免不了 O(lgn)的栈占用,因为快排是由上往下拆分的,中间每一层的状态都得记录在栈中。
nosay
2018-05-11 14:24:26 +08:00
阮老师的博客一直有在追, 受益颇多, 说误人子弟, 就比较过份了。
bucky
2018-05-11 14:28:38 +08:00
技术博客没有出现百家争鸣我也是很奇怪
wubinbin0403
2018-05-11 14:31:34 +08:00
实现快排的目的了吗?实现了。
最优解?不是。
错误版本?见仁见智。
samuel
2018-05-11 14:31:41 +08:00
看了下阮老师的实现,确实问题太大了…然而经常以阮老师的译文作为参考资料,不忍多黑
maichael
2018-05-11 14:32:49 +08:00
说明前端大多数人除了面试之外不会自己写算法。

当然,也说明了 CRUD Boy 和切图 Boy 永远占大多数。
VDimos
2018-05-11 14:33:21 +08:00
他还说过 docker 即将退出历史,还说过 webpack 这些打包工具即将成为历史。。。。
Leafove
2018-05-11 14:33:28 +08:00
从后面的评论来看在很多前端眼中阮一峰简直就是教皇,完全不能有丝毫不敬
rabbbit
2018-05-11 14:40:56 +08:00
额,当初好像看的是阮一峰的版本.问下,我这么有啥槽点 /错误吗?
aijam
2018-05-11 14:41:17 +08:00
zhicheng
2018-05-11 14:45:01 +08:00
本身就是演示一下算法,核心思想传达到了就 OK 了,难道真的有人用 JS 写的快排?要是纠细节,JS 执行要经过 parser 复杂度要不要算上?有些要做 JIT 复杂度要不要算上?

一定要能区分什么是拿来教育演示的,什么是工业生产使用的。

在我看来出题考快排的人本身就是错的,这东西除了背下来,别无他解,考验不了任何能力和智商(当然可能能排除一些记性不好的人,如果你提前告诉他要考快排实现的话。)。
alamaya
2018-05-11 14:47:40 +08:00
人非圣贤孰能无过,这篇文章有理有据有 code,也没啥问题吧。倒是有些人搞得跟偶像崇拜一样容不得别人说阮的半点不是,完全是在给阮招黑。
bucky
2018-05-11 14:47:41 +08:00
@maichael 那说说你平时用到什么算法
bucky
2018-05-11 14:57:14 +08:00
为什么大家拥护阮一峰,我也拥护阮一峰,因为许多人没有普及知识的能力,就知道嘲笑别人,除了推荐傻子都能发现的书籍,或者推荐让别人看文档以外没有一点有价值的东西,找别人的毛病倒是一套一套的,技术重要吗?重要,可是没有表达能力,技术高对他人有什么作用?上学的时候就有许多这种老师,知识深厚,讲课屁都不通,作为学生深受其害还没法宣泄,只能不断怀疑自己,而且我知道的几个编程大牛都在夸阮一峰老师,不知道那些批评的人什么水平
YenvY
2018-05-11 15:00:07 +08:00
本坛还有说阮吃人血馒头呢,这篇算是很好的纠错文了

要是换个跟阿里系血海深仇的老头子写篇文章来怼的话指不定写成什么样呢
carlclone
2018-05-11 15:01:58 +08:00
@zhicheng 你需要背不代表别人需要啊 , 这样就也做了一层筛选
chairuosen
2018-05-11 15:10:34 +08:00
作为一个前端,我面试人从来不问算法
CRVV
2018-05-11 15:11:09 +08:00
1. 用了 splice 说明他不怎么会写代码,不算错但是太奇怪了
2. 每次递归新建两个新的数组是正常的写法,其实就是 Python/Haskell 的著名的特别短的快速排序。这个版本很适合用来学习快速排序和递归,不是真拿来排序的。如果你觉得需要用背才能会写快速排序,那应该去看看这个
3. 快速排序之所以号称快速,重点是要在原来的数组里面做交换,这样的好处是很多操作都在相邻的内存上。JavaScript 没有数组,于是没有这个性质,所以 JavaScript 的快速排序应该不比堆排序快(我瞎猜的)
4. 因为 3,在原来的 Array 里交换,也不是正经的快速排序
5. 快速排序是一个很简单的算法(我认为比冒泡排序简单),根本不需要背,写那个短的 Python/Haskell 版本很容易,要把那种在一个数组里交换的版本写全对又不太容易。我觉得快速排序是一个合适的算法题
20015jjw
2018-05-11 15:14:19 +08:00
达不到 quicksort 的时间 /空间只能表示确实是完全错的 有啥好洗.. 错了就认错呗..
aijam
2018-05-11 15:14:20 +08:00
@CRVV “ JavaScript 没有数组”是什么鬼

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/454048

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX