百科问答小站 logo
百科问答小站 font logo



《阮一峰版快速排序完全是错的》一文是否存在事实错误? 第1页

  

user avatar   winter-25 网友的相关建议: 
      

讲技术的部分:

  1. 之前我一直误认为自己写的原地快排的空间复杂度是O(1),但是通过这次网友的提醒(该网友已在评论区出现 @原建业 ),我发现居然是O(log(n)),因为递归不是尾递归必须用栈,思考了下,好像并没有办法优化,怎么写都要O(log(n))。
  2. 非原地快排,就算敞开了铺着写,假设我们每层递归都产生临时数组,那么空间占用应该是 n + n/2 + n/4 + n/8 + …… ≈ 2n,也就是说,空间复杂度是O(n)
  3. 众所周知,快排进行了log(n)次O(n)的partition,所以时间复杂度是O(nlog(n)),阮老师犯下了“弥天大罪”在每次partition之前选取中间值的时候进行了一次splice,而splice的时间复杂度是O(n),partition的时间复杂度也是O(n),请问O(n) + O(n)是?

结论:阮老师写的是非原地快排,空间复杂度从O(log(n))上升到了O(n),而每次使用splice从无序的数组中间位置选取中值是毫无意义的浪费,但并没有改变时间复杂度,他写的快排时间复杂度仍然是O(nlog(n))。从实际测试结果来看,阮老师的代码性能也确实不高。

PS.阮老师这篇作于2011年,那时候阮老师的职业是什么,大家不妨了解下。


讲人的部分:

这位ideawu其人,张口闭口前端如何,透露出一股优越感,令人生厌:

“大多数前端只会表面皮毛”

"前端的天花板实在太低了"


这位同学非常有意思,你跟他讲时间复杂度,他跟你讲性能,你跟他讲性能,他跟你讲次数???在我提供了性能优于他的代码之后,他这样说:


最后,我想说,题主倒是个明白人,跟着瞎起哄的,你们可长点心吧……




  

相关话题

  程序员不需要知道太多数学,你认同吗? 
  工程上存在那么多不确定情况,为什么计算机不能利用它们产生真随机数,而只能根据逻辑产生伪随机数? 
  如何评价 2021 年 ICPC 银川赛区? 
  有什么办法可以用纯 CSS 在现代浏览器下实现单屏内容时 footer 贴底,多屏内容时 footer 随内容向下? 
  数据结构与算法在工作的作用及其大学学到什么程度才算可以? 
  刚进算法团队,大牛们讨论高深的 cv 术语和算法,如何才能听懂? 
  ES6的class关键字有没有实现真正的面向对象? 
  网上都说操作真实 DOM 慢,但测试结果却比 React 更快,为什么? 
  一个单链表,长度未知,如何快速的找出位于中间的那个元素? 
  Web 建站技术中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什么? 

前一个讨论
如何把一段简单的代码变复杂?
下一个讨论
为什么霍格沃茨没有扫帚航空指挥塔台?





© 2025-03-25 - tinynew.org. All Rights Reserved.
© 2025-03-25 - tinynew.org. 保留所有权利