为什么在平均情况下,快速排序比堆排序要优秀?

作者&投稿:俟詹 (若有异议请与网页底部的电邮联系)
为什么快速排序比堆排序快呢?~

一般情况下,快速排序效率要高于堆排序。因为堆排序的常数较大(不过也是1~2之间吧)。
快速排序的平均时间复杂度是O(1.39nlogn)。一般来说,除非有需要绝对保证不能出现O(n^2)的要求,不使用堆排。
堆排序需要有效的随机存取。

快速排序是用递归的思想,用栈来存储数据,它第n趟最多要确定2^n个数的最终位置。它使用的空间是最多的,用空间换取了时间。例如:

快速排序是二叉查找树(二叉查找树)的一个空间最优化版本。不是循序地把数据项插入到一个明确的树中,而是由快速排序组织这些数据项到一个由递归调用所隐含的树中。这两个算法完全地产生相同的比较次数,但是顺序不同。对于排序算法的稳定性指标,原地分区版本的快速排序算法是不稳定的。其他变种是可以通过牺牲性能和空间来维护稳定性的。
快速排序的最直接竞争者是堆排序(Heapsort)。堆排序通常比快速排序稍微慢,但是最坏情况的运行时间总是O(n log n)。快速排序是经常比较快,除了introsort变化版本外,仍然有最坏情况性能的机会。如果事先知道堆排序将会是需要使用的,那么直接地使用堆排序比等待introsort再切换到它还要快。堆排序也拥有重要的特点,仅使用固定额外的空间(堆排序是原地排序),而即使是最佳的快速排序变化版本也需要Θ(log n)的空间。然而,堆排序需要有效率的随机存取才能变成可行。
快速排序也与归并排序(Mergesort)竞争,这是另外一种递归排序算法,但有坏情况O(n log n)运行时间的优势。不像快速排序或堆排序,归并排序是一个稳定排序,且可以轻易地被采用在链表(linkedlist)和存储在慢速访问媒体上像是磁盘存储或网络连接存储的非常巨大数列。尽管快速排序可以被重新改写使用在炼串列上,但是它通常会因为无法随机存取而导致差的基准选择。归并排序的主要缺点,是在最佳情况下需要Ω(n)额外的空间。
快速排序和堆排序不稳定,归并排序稳定。




非原地版本的快速排序,在它的任何递归调用前需要使用O(n)空间。在最好的情况下,它的空间仍然限制在O(n),因为递归的每一阶中,使用与上一次所使用最多空间的一半,且平均为O(2n)。
它的最坏情况是很恐怖的,需要O(n2)空间,远比数列本身还多。如果这些数列元素本身自己不是固定的大小,这个问题会变得更大;举例来说,如果数列元素的大部分都是不同的,每一个将会需要大约O(log n)为原来存储,导致最好情况是O(n log n)和最坏情况是O(n2 log n)的空间需求。



被快速排序所使用的空间,依照使用的版本而定。使用原地(in-place)分区的快速排序版本,在任何递归调用前,仅会使用固定的额外空间。然而,如果需要产生O(log n)嵌套递归调用,它需要在他们每一个存储一个固定数量的信息。因为最好的情况最多需要O(log n)次的嵌套递归调用,所以它需要O(log n)的空间。最坏情况下需要O(n)次嵌套递归调用,因此需要O(n)的空间。
然而我们在这里省略一些小的细节。如果我们考虑排序任意很长的数列,我们必须要记住我们的变量像是left和right,不再被认为是占据固定的空间;也需要O(log n)对原来一个n项的数列作索引。因为我们在每一个堆栈框架中都有像这些的变量,实际上快速排序在最好跟平均的情况下,需要O(log2 n)空间的比特数,以及最坏情况下O(n log n)的空间。然而,这并不会太可怕,因为如果一个数列大部分都是不同的元素,那么数列本身也会占据O(n log n)的空间字节。




...回答问题.(1)在多年平均情况下,福州梅雨起始日是___,
(1)、注意图中实线表示梅雨开始日期、虚线表示梅雨终止日期,再结合福州、徐州位置处实虚线数字可判断起始日期和结束日期.(2)、图中实线显示杭州梅雨多年平均起始日为6月5日,虚线显示终止日为7月9日,故杭州梅雨持续天数为34天;同样可读图分析,宜昌梅雨多年平均起始日为6月15日,多年平均终止日...

统计学中的平均数有哪几种?各在什么情况下使用?
分为算术平均数(又包含:简单算术平均数、加权算术平均数)和调和平均数(又包含简单调和平均数和加权调和平均数)算术平均数=总体标志总量\/总体单位总数.一般,分子与分母在经济内容上有着从属关系.调和平均数是总体各单位标志值倒数的算术平均数的倒数.

什么情况下工资总额提高了平均工资下降
解释:平均工资是单位工资总额除以年内(季度内)平均职工人数得出的。根据现行统计制度,工资总额是本单位在一定时期内直接支付给本单位全部职工的劳动报酬总额,包括计时工资、计件工资、奖金、津贴和补贴、加班加点工资、特殊情况下支付的工资,不论是否计入成本,不论是以货币形式还是以实物形式支付,均包括...

关于平均数、中位数、众数在什么情况下使用合适
平均数不能用于数据差异很大。如经理工资50000,员工工资500时,就不适用。中位数主要是可知道位数 众数则在数据分散时没用,要集中时就能很好体现。如你班的年龄。此时就往往集中在某个数据,就很有代表性。而象1,2,3,4。根本就没有众数。

在什么情况下用平均数、众数和中位数合适
1.求中位数要将一组数据按大小顺序,而不必计算,顾名思义,中位数就是位置处于最中间的一个数(或最中间的两个数的平均数),排序时,从小到大或从大到小都可以.2.在数据个数为奇数的情况下,中位数是这组数据中的一个数据;但在数据个数为偶数的情况下,其中位数是最中间两个数据的平均...

在什么情况下,应用简单算数平均数和加权算数平均数计算结果是一样的...
在什么情况下,应用简单算术平均数和加权算术平均数计算的结果相同?试举例说明。答:在权数相等的场合,比如计算工人平均工资,当各组工人数完全相同时,应用简单算数平均数和加权算术平均数的结果相同 .

为什么用平均数和中位数
在这种情况下,中位数更有参考价值。因为平均数容易受到极端值的影响,如果数据中有极高或者极低的薪资水平,那么平均数会被拉高或者拉低,导致平均数不能很好地反映整体的薪资水平。而中位数则不受极端值的影响,它是将所有的数据按照大小排序后,处于中间位置的数值。因此,中位数更能够反映数据的...

完全竞争市场的短期均衡是什么情况?
画出完全竞争厂商短期均衡的五种情况,说明厂商什么情况下退出市场 第一种情况:在均衡点E1厂商的平均收益大于平均总成本厂商获利。第二种情况:在均衡点E2厂商的平均收益等于平均总成本。厂商既无利润,又无亏损。这点也称为厂商的收支相抵点。第三种情况:在均衡点E3厂商的平均收益小于平均总成本厂商亏损...

C35砼试块在平均23.24度的情况下两天强度是多少
正常情况下,23℃左右混凝土两天强度应达到15Mpa左右(12~17Mpa),如果有缓凝剂早强剂等就不一定了

为什么高达seed里面新人类组成的扎夫特在平均素质远高于联邦的情况下没...
但体积大、能源自给,且机动性不足。扎夫特的决策更多是在现有条件下寻求变革,而不是大规模复制联邦的生产模式。最终,扎夫特在资源和技术上的短板,迫使他们转向了小型反中子干扰器这样的高技术含量领域。然而,内部分裂和泄露使得这些优势未能充分发挥,为战争结果增添了不确定性。

渠县15262016265: 数据结构中堆排序,快速排序,归并排序排序的时间复杂度顺序快慢依次是什么?平均情况下排序最快最慢的分别是什么? -
众律强筋:[答案] 堆排序 平均时间:O(n*logn) 最坏:O(n*logn) 快速排序 平均时间:O(n*logn) 最坏:O(n的平方) 归并排序 平均时间:O(n*logn) 最坏:O(n的平方) 排序算法没有最快情况的说法. 从平均性能来说,快速排序最佳,因为所需时间最短,但快速排序在最...

渠县15262016265: 如何理解快速排序的效率高于归并排序,堆排序,如何 -
众律强筋: 排序算珐 时间复杂度 优点 缺点 快排 O(nlbn) 执丨行时间短 很差情况下执丨行时间长、占用内存多 堆排序 O(nlbn) 执丨行时间短 编写有点麻烦,有较差的情况 归并排序 O(nlbn) 稳定的排序算珐,无较差情况 占用内存很大

渠县15262016265: 堆排序,归并排序,快速排序的比较,到底谁快 -
众律强筋: 堆排序 n*logn 时间在这里比较优 不过稳定性差 快排 O(nlogn),最坏情况为O(n^2).在实际应用中,快速排序的平均时间复杂度为O(nlogn).比较均衡 直接插入排序,简单选择排序 n^2 希尔排序和基数排序 不太了解 空间的话 个人认为是一样的 因为你要用同样的数组去存 只是存的顺序不同罢了 时间的话 100W以内 快排 最优 100W以上 堆排的优越性就明显出来了 所以一般快排就可以满足

渠县15262016265: 为什么java底层使用快速排序而不使用堆排序 -
众律强筋: 一般情况下,快速排序效率要高于堆排序.因为堆排序的常数较大(不过也是1~2之间吧).快速排序的平均时间复杂度是O(1.39nlogn).一般来说,除非有需要绝对保证不能出现O(n^2)的要求,不使用堆排.堆排序需要有效的随机存取.

渠县15262016265: 快速排序为什么是效率最高的? -
众律强筋: 基数排序是属于稳定性的排序在某些时候是比其他的比较性排序要快 但是如果看一般情况,数据为随机的,快速排序是效率很高的.

渠县15262016265: 什么排序的速度(时间复杂度)最快? -
众律强筋: 从时间复杂度看,所有内部排序方法可以分为两类.1.插入排序 选择排序 起泡排序 其时间复杂度为O(n2);2.堆排序 快速排序 归并排序 其时间复杂度为O(nlog2n).这是就平均情况而言的,如果从最好的情况考虑, 则插入排序和起泡排序的时间复杂度最好,为O(n), 而其他算法的最好情况同平均情况大致相同.如果从最坏的情况考虑,快速排序的时间复杂度为O(n2),插入排序和起泡排序虽然同平均情况相同,但系数大约增加一倍,运行速度降低一半,而选择排序、堆排序和归并排序则影响不大.总之, 在平均情况下,快速排序最快; 在最好情况下,插入排序和起泡排序最快; 在最坏情况下,堆排序和归并排序最快.

渠县15262016265: 为什么堆排序比快排慢呢? -
众律强筋: 可能是建堆和remove都需要N(LogN),而快排不需要建立了.这可能是其中一个原因.这至少2倍了.但是有时候,比如取TopK的时候,需要建立一个堆的结构,这样NLogK就很好了.

渠县15262016265: 快速排序与希尔排序哪个效率更高? -
众律强筋: 个人认为是快速排序. 快速排序的最差复杂度可能会降为n^2,最快则是nlogn,但是,平均情况下是较快的. 而 希尔排序的最差情况下,复杂度可能会降为n^s 到n^s之间,(1<=s<=2),平均则是nlog^2n.理论上来看,希尔排序可能是效率...

渠县15262016265: 冒泡排序和快速排序在平均意义上, 那种方法比较快(效率高)? 为什么?( -
众律强筋: 你指的是 选择排序吧 那咱么就做个比较吧 冒泡N个数 需要比较N-1 +N-2+N-3+..+1 =(1+N-1)*(N-1)/2=(N^2-N)/2选择法 打擂台选N个数 N-1 +N-2+N-3+..+1 =(1+N-1)*(N-1)/2=(N^2-N)/2在效率方面应该是一样的 但前者只需要一个第三变量 用作换位置 编程复杂 后者则是作为最大(小)值 还需要在另一个有着N个位置的地方 排值 编程简单再者 人脑么冒泡不会出错 电脑么 反正空间多 具体应看情况 看样本的多少

渠县15262016265: 常用的排序算法特点和逻辑数据模型特点 -
众律强筋: 常用的排序算法有插入排序,希尔排序,冒泡排序,快速排序,归并排序,堆排序还有基数排序.排序算法一般考虑的就是两个方面,即时间复杂度和空间复杂度.其中插入排序,冒泡排序是简单排序,排序的平均时间复杂度是O(n^2), 最坏的...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网