相关文章推荐
另类的萝卜  ·  matpool 行业动态 | ...·  1 年前    · 
失眠的红豆  ·  用 Span 对 C# ...·  1 年前    · 
小眼睛的红豆  ·  %matplotlib inline - ...·  1 年前    · 
小胡子的荔枝  ·  No module named ...·  1 年前    · 
正如归并排序一样,快速排序也是递归的,因此,他的分析需要求解一个递推公式。我们将对快速排序进行这种分析,假设有一个随机的枢纽元(不用三数中值分割法),对一些小的文件也不使用截止范围。和归并排序一样,取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语言描述)》 片段,字太多了,全是公式推导,打了一部分
2019-07-17 22:49:43
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) 2019-07-17 22:49:43
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) 2019-07-17 22:49:43 企业邮箱发送邮件时,若出现投递失败产生退信,内容提示包含如下: the mta server of * reply:550 failed to meet SPF requirements 或者 the mta server of 163.com — 163mx01.mxmail.netease.com(220.181.14.141) reply:550 MI:SPF mx14,QMCowECpA0qTiftVaeB3Cg—.872S2 1442548128 http://mail.163.com/help 298878