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

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

v 友们怎么看这个问题?

完整分析见 https://juejin.im/post/5af4902a6fb9a07abf728c40
37143 次点击
所在节点    JavaScript
194 条回复
natscat
2018-05-11 16:21:45 +08:00
@zhicheng #31 那如果面试考算法考啥?我觉得二分查找和快速排序是最基本的了
当然招一个合格的人有多种考察维度 但算法这边你不会二分查找和快排我也不指望你能会更复杂的了
Pikaping
2018-05-11 16:28:39 +08:00
别提了。。阮一峰日常出错被怼,他发的很多微博低级错误太明显了,只能糊弄对那方面知识完全不懂的人,他的人气是写了这么多年博客积累起来的,但是越来越不靠谱了
skadi
2018-05-11 16:32:52 +08:00
@zhicheng 这种是计算机系的教材的基本东西啊...我想你可能有啥误解.
davinci
2018-05-11 16:36:22 +08:00
其实阮一峰版本的快排最坏情况的时间复杂度才是 O(n^2),理想情况即每次划分都是平分,时间复杂度也是 O(nlogn)。空间复杂度最坏情况 O(n^2),理想情况 O(n)
Cbdy
2018-05-11 16:45:10 +08:00
过年的时候用 js 写过一个,不知道写得对不对,和教科书上的类似了
https://github.com/cbdyzj/data-structure/blob/master/sort/quick_sort.ts
zhicheng
2018-05-11 16:46:24 +08:00
@skadi 基础的怎么了,错的最多的就是这些,抓细节连 int mid =(low + high) / 2; 都是错的。

@natscat 连应试教育考试也不是考试你 Xxx 定理,而是考如何运用 Xxx 定理。
iceheart
2018-05-11 16:48:30 +08:00
怼了一通,最后跑代码千万量级的一个是 5 秒,一个是 10 秒,差别很大吗?还不是一个级别么?我觉得还是简洁的代码更好看。
wheat0r
2018-05-11 16:51:10 +08:00
@Nicksxs 终于能插上话了,芝士还真不是奶油…
芝士对应的是 cheese
奶油是 cream
不管是在国内还是在国外都不是一种东西
CastleBUPT
2018-05-11 17:02:08 +08:00
@carlclone
“感觉日常本来用到算法的地方就不多,就算是有也是随便写个方法能实现就行了,没去仔细考虑过效率的问题,阮一峰的这个快排目前看来确实不是最优解,至少我还能理解,什么时间空间的完全搞不懂”。
看到这个回复的时候我都要窒息了。
读书无用论真是太有群众基础了。
vansouth
2018-05-11 17:04:50 +08:00
我只想说,人家阮一峰写的那文章好像是 11 年的,你现在来怼人家····666
CFMY
2018-05-11 17:18:27 +08:00
这只是博客又不是教程,现在的人也太不要脸了,为了热度连"完全是错的" 这种标题都取得出来
这作者扪心自问一下,良心不会痛吗
zzNucker
2018-05-11 17:23:34 +08:00
毕竟日常怼阮一峰是显示自己牛逼的好途径
Biwood
2018-05-11 17:46:56 +08:00
在这件事情中发现了两种人:
照本宣科的在面试中直接使用文章的示例代码的人,
以及高兴的上蹿下跳认为自己挖到宝藏了的人。
natscat
2018-05-11 17:49:28 +08:00
@zhicheng #66 a^2+b^2=c^定理都背不下来 指望在实际生产中运用?
grantonzhuang
2018-05-11 17:52:54 +08:00
看到关于这件事的评论,作为一个前端,感觉自己处在鄙视链的底层……
shihira
2018-05-11 17:54:51 +08:00
若是平常人,在博客写了错的排序,评论区大概会有好心人善意指正,一来一往其乐融融
若是阮一峰,嘿,怼!
zhicheng
2018-05-11 17:55:46 +08:00
@natscat 记住的应该是 a^2 + b^2 = c^2 而不是 a^2 + b^2 = c^2 的证明过程。就像在实际上,知道快排,知道怎么用及它的特点就可以了,甚至不知道特点也无所谓,因为几乎所有需要排序的地方用的都是快排。
shyrock
2018-05-11 17:56:32 +08:00
这篇怼文的数据,怎么说呢,不是很科学。既然指出时间和空间复杂度两方面的错误,怎么就没有测试空间复杂度的数据呢?另外测试数据至少来三个点吧,才看的出来到底两种算法的差距是什么级别的,只有一个点,那 5s 跟 10s 的差距到底意味着什么?
shyrock
2018-05-11 17:59:54 +08:00
作为 js 新手,我还有一个小疑问,阮的算法用 splice,效果是移除了原数组的一个数据项,而纠错作者直接用下标获取,没有移除这个数据项。按理说,阮的算法会丢一个数据吧?
66beta
2018-05-11 18:02:55 +08:00
阮老师有 share 精神,怼他的那位,暂时没看出来

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

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

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

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

© 2021 V2EX