快速排序算法在平均情况下的时间复杂度为 求详解

如题所述

时间复杂度为O(nlogn) n为元素个数
1. 快速排序的三个步骤:
1.1. 找到序列中用于划分序列的元素
1.2. 用元素划分序列
1.3. 对划分后的两个序列重复1,2两个步骤指导序列无法再划分
所以对于n个元素其排序时间为
T(n) = 2*T(n/2) + n (表示将长度为n的序列划分为两个子序列,每个子序列需要T(n/2)
的时间,而划分序列需要n的时间)
而 T(1) = 1 (表示长度为1的序列无法划分子序列,只需要1的时间即可)
T(n) = 2^logn + logn * n (n被不断二分最终只能二分logn次(最优的情况,每次选取
的元素都均分序列))
= n + nlogn
因此T(n) = O(nlogn)
以上是最优情况的推导,因此快速排序在最优情况下其排序时间为O(nlogn),通常平均情况
我们也认为是此值。
在最坏情况下其会退化为冒泡排序,T(n) = T(n - 1) + n (每次选取的元素只能将序列划分为
一段,即自身是 最小元素或最大元素)
因此T(n) = n * (n-1) / 2 相当于O(n^2)追问

n被不断二分最终只能二分logn次 什么意思?

追答

在最优的情况下,即每次二分序列时都将序列平均的分为两部分,此时n被不断二分最终只能二分logn次。

即起始为n,第一次分为两个n/2,第二次分为四个n/4...第m次分为2^m个1,
意思就是在最优的情况下对n进行二分时最多二分m次即会出现2^m个全为1的序列。
所以此时2^m * 1 = n 因此显然m=logn。
推倒方式如下:
T(n) = 2*T(n/2) + n

T(n) = 2 * (2 * T(n/4) + n/2) + n
......
T(n) = 2^mT(1) + mn
其中m即等于logn,所以T(n) = nT(1) + nlogn = n + nlogn

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-30
时间复杂度为O(nlogn)N是多少元素
1。快速排序的三个步骤:

1.1。查找序列用于划分的序列中的元素

1.2元素划分的序列

1.3 1,2两个步骤的过程不断重复,两个序列划分指导序列不能被细分

n个元素的排序条件为T(n)= 2 * T(n / 2个)+ N(表示序列分为两个子序列中的n的长度,每个子序列需要到T(n / 2个)

时间除以

T(1)= 1(序列的长度不能被划分为子序列,序列的n个)只需要1罐)

T(N)= 2 ^ LOGN + LOGN * N(n为不断二分法最后只有两点:LOGN(最佳,各选择

平均序列的元素))

= N + nlogn

因此,T(N)= O(nlogn )

以上是派生的理想情况下,快速排序排序在最佳的情况下,时间为O(nlogn)通常平均

我们也相信,这个值。

在最坏的情况下,它会沦为冒泡排序,T(N)= T(n - 1个)+ N(每次选择元素序列分为

一些,这是他们自己的元素是最小的或最大的元素)
T(N)= N *(N-1)/ 2,相当于为O(N ^ 2)
第2个回答  2013-03-09
正如归并排序一样,快速排序也是递归的,因此,他的分析需要求解一个递推公式。我们将对快速排序进行这种分析,假设有一个随机的枢纽元(不用三数中值分割法),对一些小的文件也不使用截止范围。和归并排序一样,取T(0)=T(1)=1,快速排序的运行时间等于两个递归调用的运行时间加上花费在分割上的限行时间(枢纽元的选取仅花费常数时间)。我们得到基本的快速排序关系:
T(N)=T(i)+T(N-i-1)+cN

其中,i=|S1|是S1中的时间个数。我们还将考查三种情况。

最坏情况的分析:
枢纽元始终是最小元素。此时i=0,如果我们忽略无关紧要的 T(0)-1,那么递推关系为

T(N0=T(1)+c(sum+=i;i in (2,N])= O(N^2)

最好情况:
在最好的情况下,枢纽元正好位于中间,T(N)=O(N* log(N))

平均情况的分析:
T(N)=O(N*logN)

《数据结构与算法分许(C语言描述)》 片段,字太多了,全是公式推导,打了一部分
相似回答