快速排序复杂度分析

作者&投稿:冷詹 (若有异议请与网页底部的电邮联系)
~ 1.时间复杂度

考虑到最好情况,每次都是均匀划分,则运算成本为:

T(n) =2 * T(n/2) + n

递归展开后:

T(n) = 2 * 2[T(n/4) + n/2] + n = 2^kT(n/(2^k)) + kn

最后结束于T(1), 即:2^k=n

可得:

T(n) = Cn + nlogn

不难看出复杂度为O(nlogn)。

但如果是最坏情况,比如[1,2,3,4,5],若一数组末尾元素作为划分标准,那么计算的成本就变为了:

T(n) = T(n-1) + n = 1 +2 +....+5 = n(n+1)/2

很明显,复杂度变成了O(n^2)。

为了防止这种情况,在选取基准元素的地方可以再进行优化,比如三数取中法(随机取三个不相等的元素,取中间大小的那个元素作为基准值)

并且当待排序序列的长度分割到一定大小后,使用插入排序(在数组长度较小时,插入排序大效率会高于快速排序)。

2.空间复杂度

快速排序使用递归,递归使用栈

最好情况: 每次左右都是均匀划分 , 递归树的深度为:logn,其空间复杂度也就为 O(logn),

最坏情况: 每次只能排除一个元素,要递归剩下n-1个元素,如:[1,2,3,4,5],或[5,4,3,2,1]

需要进行n‐1次递归调用,其空间复杂度为O(n),

平均情况: 空间复杂度也为O(logn)。

3.稳定性:

快速排序无法保证相等的元素的相对位置不变,因此它是不稳定的排序算法


计数排序
计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中.作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数.1.找出待排序的数组中最大和最小的元素;2.统计数组中每个值为i的元素出现的次数,存入数组C的第i项;3.对所有的计数累加(从...

算法的复杂度如何衡量?
空间复杂度的分析要简单得多。空间复杂度记做S(n)=O(f(n))。比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量。

直接选择排序算法在最好情况下的时间复杂度为多少
关键字比较次数永远是n(n-1)\/2,记录移动次数最多为3(n-1),最少0次,前者起主导作用,因此实际上时间复杂度还是O(n^2)。在直接选择排序中,共需要进行n-1次选择和交换,每次选择需要进行 n-i 次比较 (1<=i<=n-1),而每次交换最多需要3次移动,因此,总的比较次数C=(n*n - n)\/2,...

归并排序的平均时间复杂度
归并排序的平均时间复杂度为O(nlogn)。归并排序是一种分治算法,它将待排序的数组分成两个子数组,对每个子数组进行排序,然后将它们合并成一个有序的数组。在归并排序中,每次递归都会将数组分成两个子数组,因此递归的深度为log(n)。在每一层递归中,需要对子数组进行合并操作,合并两个有序数组的...

算法的空间复杂度和时间复杂度的关系
算法时间复杂度分析是一个很重要的问题,任何一个程序员都应该熟练掌握其概念和基本方法,而且要善于从数学层面上探寻其本质,才能准确理解其内涵。2、算法的空间复杂度 类似于时间复杂度的讨论,一个算法的空间复杂度(Space Complexity)S(n)定义为该算法所耗费的存储空间,它也是问题规模n的函数。渐近空间复杂度也常常...

归并排序详解
算法稳定性: 在归并排序中,相等元素的顺序不会改变,所以它是稳定的算法。 总结: 1)时间复杂度:O(nlogn) 2)空间复杂度:O(n) 3)稳定性:稳定 4)复杂性:较复杂 1)空间复杂度考虑:选择优先级为[堆排序>快速排序>归并排序]。 2)稳定性考虑:应选归并排序,堆排序和快速排序都是不稳定的。 3)平均排序速度考...

描述n个数据的冒泡排序算法,时间复杂度是多少
冒泡排序的算法时间复杂度上O(n^2 )冒泡排序是这样实现的:首先将所有待排序的数字放入工作列表中。从列表的第一个数字到倒数第二个数字,逐个检查:若某一位上的数字大于他的下一位,则将它与它的下一位交换。重复2号步骤,直至再也不能交换。冒泡排序的平均时间复杂度与插入排序相同,也是平方级的...

算法题(答对追加100分):n*n矩阵,不同行不同列选n个数 使其和最大 怎么...
^A..B..C D..E..F G..H..I ∑EFIH = ∑AGIC - ∑ADFC - ∑AGHB + ∑ADEB 先算出以A为左上角的所有矩阵的和(O(N^2))再枚举所有的子矩阵(O(N^4))如:数组按照大小排序,排序的zhi同时记录下行号和列号,如果快速排序,时间复杂度log2(n)*n;遍历排好顺序的数组,两两求和...

计算机二级ms office高级应用基础知识
数据结构按各元素之间前后件关系的复杂度可划分为: (1)线性结构:有且只有一个根节点,且每个节点最多有一个直接前驱和一个直接后继的非空数据结构。 (2)非线性结构:不满足线性结构的数据结构。 1.3线性表及其顺序存储结构 1.线性表的基本概念 线性结构又称线性表,线性表是最简单也是最常用的一种数据结构。 2...

有限数字的排列方式的计算
我将按照算法的复杂度,从简单到难来分析算法。 第一部分是简单排序算法,后面你将看到他们的共同点是算法复杂度为O(N*N)(因为没有使用word,所以无法打出上标和下标)。 第二部分是高级排序算法,复杂度为O(Log2(N))。这里我们只介绍一种算法。另外还有几种算法因为涉及树与堆的概念,所以这里不于讨论。 第三部...

和田县13649849703: 快速排序法的平均时间复杂度和最坏时间复杂度分别是多少? -
大质桂附: 快速排序的平均时间复杂度和最坏时间复杂度分别是O(nlgn)、O(n^2). 当排序已经成为基本有序状态时,快速排序退化为O(n^2),一般情况下,排序为指数复杂度. 快速排序最差情况递归调用栈高度O(n),平均情况递归调用栈高度O(logn),而...

和田县13649849703: 快速排序时间复杂度怎样推算的 -
大质桂附: 快速排序是基于二分的,所以在理想情况下它的时间复杂度为O(NLOG2N),极端情况下(数据恰好逆序)则相当于选择排序,复杂度退化为O(N^2);

和田县13649849703: 快速排序的时间复杂度是怎么算出来的 -
大质桂附: n 趋于无穷大时无穷大的阶数.同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率.算法分析的目的在于选择合适算法和改进算法. 计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间.这是一个关于代表算法输入值的字符串的长度的函数.时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数.使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时的情况. -

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

和田县13649849703: C语言 各常见排序法的时间复杂度 急 请简单说明 -
大质桂附: 选择排序抄算法复杂度是O(n^2). 插入排序是O(n^2) 快速排序快速排序是不稳2113定的.5261最理想情况算法时间复杂度O(nlog2n),最坏4102O(n^2). 堆排序算法时间复杂度O(nlogn). 归并1653排序的时间复杂度是O(nlog2n).

和田县13649849703: 8、快速排序平均情况和最坏情况下的算法时间复杂度分别为:A)平均情况O(nlog(2,n)),最坏情况O(n^2) B)8、快速排序平均情况和最坏情况下的算法时间... -
大质桂附:[答案] 是A 最坏的情况是当这个列本来就有序的情况,这样的情况是很坏的,达到了N平方的复杂度.

和田县13649849703: 快速排序等时间复杂度问题
大质桂附: 时间复杂度实际上就是程序的关键语句运行的次数. 算法复杂度的评价一般是算法对于一个大小固定的样本的执行时间,一般这个时间可以通过一个根据算法评估出来的多项式来表达的.例如,选择排序的复杂度就是O(n^2)[注:选择排序对于长度为n的序列每选出第k个数都要和后面k+1~n数进行比较,所以实际的复杂程度应该是n+n-1+n-2+...+2+1=(n^2+n)/2而在复杂度表示时,n被看作极大的值,所以忽略他的系数和后面的低次项,所以表示成o(n^2)] 对于快速排序,同样可以求出它的平均复杂度是O(NlogN)具体的计算方法可以自己尝试(提示,划分次数是log N 比较次数是N)最坏情况是O(n^2)

和田县13649849703: 如何证明快速排序法的平均复杂度为O -
大质桂附: 时间复杂度为O(nlogn) n为元素个数1. 快速排序的三个步骤:1.1. 找到序列中用于划分序列的元素1.2. 用元素划分序列1.3. 对划分后的两个序列重复1,2两个步骤指导序列无法再划分 所以对于n个元素其排序时间为T(n) = 2*T(n/2) + n (表示将长...

和田县13649849703: 快速排序方法的时间复杂度为O(n^2)=n(n - 1)/2中O()是什么意思? -
大质桂附: 1)对于你的问题简单解释如下: 理论计算机研究中,衡量算法一般从两个方面分析:时间复杂度和空间复杂度.空间复杂度跟时间复杂度是类似的,下面简单解释一下时间复杂度:对于一个数据规模为n的问题,解决该问题的算法所用时间可以用...

和田县13649849703: 数据结构中堆排序,快速排序,归并排序排序的时间复杂度顺序快慢依次是什么? -
大质桂附: 堆排序 平均时间:O(n*logn) 最坏:O(n*logn) 快速排序 平均时间:O(n*logn) 最坏:O(n的平方) 归并排序 平均时间:O(n*logn) 最坏:O(n的平方) 排序算法没有最快情况的说法. 从平均性能来说,快速排序最佳,因为所需时间最短,但快速排序在最坏情况下的时间性能不如堆排序和归并排序.n较大时,归并排序所需时间较堆排序省,但归并排序需要的辅助存储量更大.

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