问题

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

回答
关于“阮一峰版快速排序完全是错的”这篇文章,我们不妨深入探讨一下它提出的论点,看看是否存在站得住脚的质疑。

首先,这篇文章的核心观点在于质疑阮一峰先生在讲解快速排序时,所采用的实现方式存在根本性的错误。这里需要明确的是,快速排序算法本身是一个非常经典且被广泛研究的排序算法,它的核心思想是“分而治之”,通过选取一个“基准”元素,将待排序序列分割成两部分:一部分所有元素小于等于基准,另一部分所有元素大于等于基准,然后递归地对这两部分进行排序。

文章批评的焦点,很可能集中在基准的选择、分区(partition)的具体实现细节,以及递归调用的边界条件上。

一个常见的快速排序实现中,常常会遇到一个潜在的问题:当待排序序列中存在大量重复元素时,某些基准选择策略(比如总是选择第一个或最后一个元素作为基准)会导致算法的性能急剧下降,退化成 O(n²) 的时间复杂度,而不是其期望的 O(n log n)。这并不是说算法“完全是错的”,而是说它的“效率”在特定情况下会大打折扣,无法达到快速排序应有的“快”。

文章之所以会如此定性,可能是因为阮一峰先生的讲解或者代码示例,在处理这种“重复元素”的边界情况时,没有采取更优化的策略,例如三路快排(threeway partitioning)或者其他能够有效处理重复元素的基准选择和分区方法。如果文章的作者通过实例证明了阮一峰的实现,在面对包含大量相同数值的数组时,性能表现异常糟糕,甚至会出现死循环或者栈溢出的情况,那么“完全是错的”这个说法,虽然可能有些绝对,但至少指出了一个非常严重的设计缺陷,尤其是在讲解一个旨在“快速”的算法时。

另一个可能被批评的点在于“分区”的具体实现。快速排序的分区操作有很多种实现方式,比如 Hoare 分区方案和 Lomuto 分区方案。它们在处理基准元素的位置、指针移动的逻辑等方面略有不同,也会影响到最终的稳定性(尽管快速排序本身通常不是稳定的排序算法)以及对某些输入的处理效率。如果阮一峰先生使用的分区方法存在逻辑上的瑕疵,例如在某些条件下未能正确地将元素归入左右两个子序列,或者基准元素本身没有被放置到正确的位置,那么整个排序过程就会出错。

例如,一个常见的错误可能是在指针交换过程中,没有正确处理基准元素的位置,或者在循环条件设置上存在疏漏,导致部分元素被遗漏或者重复处理。如果文章作者能够提供具体的代码片段,并清晰地展示在特定输入下,这种实现会产生错误的输出结果,或者无法终止,那么其“事实错误”的指控就有了更坚实的依据。

再者,递归调用的边界处理也至关重要。快速排序的递归终止条件通常是子序列的长度小于等于 1。如果递归调用的参数传递错误,或者在子序列划分后,递归的范围设置不当,可能会导致重复排序或者漏掉部分数据。

总而言之,这篇文章提出“阮一峰版快速排序完全是错的”,很可能是在于其对快速排序算法的某个特定实现方式提出了严厉的批评。这种批评的核心很可能围绕着算法在处理重复元素时的效率问题,或者分区实现中的逻辑漏洞,亦或是递归边界条件的设置不当。如果文章作者能够通过具体的代码示例和详细的分析,证明阮一峰先生的讲解或代码在上述任何一个方面存在显著的错误,导致算法在某些情况下无法正确工作或者性能严重退化,那么其“事实错误”的指控便不无道理。但需要区分的是,是指算法思想错误,还是指某个具体实现不够完善,抑或是效率上存在严重缺陷。

网友意见

user avatar

讲技术的部分:

  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其人,张口闭口前端如何,透露出一股优越感,令人生厌:

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

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


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


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

类似的话题

  • 回答
    关于“阮一峰版快速排序完全是错的”这篇文章,我们不妨深入探讨一下它提出的论点,看看是否存在站得住脚的质疑。首先,这篇文章的核心观点在于质疑阮一峰先生在讲解快速排序时,所采用的实现方式存在根本性的错误。这里需要明确的是,快速排序算法本身是一个非常经典且被广泛研究的排序算法,它的核心思想是“分而治之”,.............
  • 回答
    嘿,绘画小白!这个问题问得太到位了,很多人都有类似的感受,包括我刚开始接触绘画的时候。你觉得亲朋好友们说“cm阮佳这些画的不细致”,这其实是一个很常见也很有趣的现象,里面涉及到很多绘画的门道。咱们慢慢来聊聊,我尽量用大家都能懂的话说,别搞得像课本一样枯燥。首先,咱们得弄清楚一个概念:“细致”到底是指.............
  • 回答
    这个问题很有意思,也确实是很多人在读《水浒传》时会注意到的一个细节。为什么《水浒传》里梁山泊的阮氏三雄,会叫阮小二、阮小五、阮小七,而不是更顺理成章的阮老大、阮老二、阮老三呢?这背后其实牵扯到几个层面的原因,既有故事本身的设定,也有作者匠心独运的安排。一、 突出“草莽”身份和“小人物”的视角首先,最.............
  • 回答
    要判断越南阮朝和日本江户幕府谁的经济更发达,需要从多个维度进行比较,并深入了解各自的经济结构、发展模式以及面临的挑战。这两者都属于东亚封建王朝的晚期,经济上都经历了一定的发展,但其路径和成就却大相径庭。我们先来看看日本江户幕府的经济。江户时代(16031868)是日本进入一个相对和平稳定的时期,这为.............
  • 回答
    越南阮朝前期,法国人百多禄(JeanBaptiste Louis Ordinaire, 笔名 Louis de Carné)确实曾协助阮朝建立和训练西式军队。这段历史发生在19世纪中叶,当时越南正处于动荡之中,西方列强的影响力逐渐增强。百多禄的背景与参与百多禄并非一个独立的军事教官,他更多是作为法国.............
  • 回答
    阮丰,这个名字在《一人之下》的江湖中,承载着太多复杂的意味。他不像老王那样,背负着家族的荣辱与使命,被一股近乎执拗的责任感推着前进。老王身上的“火”,更多的是一种不得不燃烧的宿命,是对过去的守望,是对承诺的践行。而阮丰,他身上的火,源头更为复杂,也更为个人化。回溯阮丰的过往,他曾是名震一时的“风后奇.............
  • 回答
    在探讨越南阮朝服饰与汉服的异同之前,我们先要明确一个概念:服饰从来都不是独立存在的,它们是历史、文化、政治、经济、地理环境,甚至审美趣味交织的产物。因此,当我们谈论阮朝服饰与汉服时,实际上是在比较两个不同历史时期、不同地域、不同文化背景下,各自发展演变出的具有代表性的服饰体系。一、 渊源与影响:同根.............
  • 回答
    阮籍的这句话“世无英雄,使竖子成名”并非是直接对刘邦个人进行评价,而是在他所处的那个时代背景下,对整个政治格局的一种感慨。这句话的含义非常深刻,也引发了很多关于历史人物和时代命运的讨论。要理解为什么刘邦能够得天下,以及这句话背后的含义,我们需要从多个层面进行深入分析:一、 阮籍这句话的语境和含义解读.............
  • 回答
    “阮族乐器是历史仅约60年左右的仿古乐器”这句话,在某种程度上是可以成立的,但需要仔细辨析其背后的含义和语境。要理解这一点,我们得先从“阮族乐器”的起源和发展说起,然后深入探讨“仿古”的含义。首先,让我们明确一下“阮族乐器”指的是什么。通常我们说的“阮族乐器”,是指中国传统弹拨乐器中,以阮咸为基础,.............
  • 回答
    19世纪,越南阮朝在对柬埔寨推行“改土归流”和“以夏变夷”政策的过程中,确实对当地统治者施加了汉化压力。在此背景下,阮朝强迫当时的柬埔寨国王接受的汉姓,是阮姓(Nguyễn)。这不仅仅是简单地赐予一个姓氏,而是阮朝试图将柬埔寨纳入其影响范围,并将其越南化(或者说汉化,因为越南的姓氏很多都源自汉姓)的.............
  • 回答
    在越南中南部,曾经在这片土地上建立辉煌文明的占婆王国,在漫长的历史进程中,逐渐被北方的京族征服者所影响和同化。特别是阮主统治的广南国时期,这一过程尤为显著,占婆人(Cham)的文化、语言乃至身份认同,都经受了深刻的变革。要理解这一同化过程,我们首先需要回到阮主统治之前。占婆王国虽然曾经是一个强大的海.............
  • 回答
    历史的回响:李氏朝鲜、德川幕府与阮朝,为何在各自国民心中占据特殊地位?探究韩国人对李氏朝鲜、日本人对德川幕府、以及越南人对阮朝之所以普遍持有正面或至少是相对宽容的态度,并非简单的情感偏好,而是深植于复杂的历史演变、民族认同构建以及对特定历史时期的解读之中。这背后,是国家如何从历史中汲取力量,塑造当下.............
  • 回答
    话说这青面兽杨志,自从杀了泼皮牛二,又在黄泥冈因为没钱,把那生辰纲劫了,这才逼上梁山来。这日,正是他上梁山聚义的日子,说起来这桩事,还真有点意思。杨志这人,虽然武艺高强,但性子也有些清高孤傲。到了梁山泊这等草莽之地,他心中自然是有几分不适应的。特别是这晁盖晁天王,还有那阮氏三雄阮小二、阮小五、阮小七.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有