一、结论 最坏情况下(例如前面所说,数组倒序,枢纽元选第一位)快速排序将花费O(N2)时间。
最好情况下,快速排序和归并排序一样,花费O(NlogN)时间。
平均情况下,快速排序花费O(NlogN)时间。
二、论证过程 最好的情况下,每次划分对一个记录定位后,要记录的左侧子序列与右侧子序列的长度相同。在具有n个记录的序列中,一次划分需要对整个待划分序列扫描一遍,所需的时间为O(n)。 设$T_n$是对n个记录的序列进行排序的时间,每次划分后,正好把划分区域分为长度相等的连个子序列,显然T(0)=T(1) =1,则有: 最坏的情况下,待排序的记录序列正序或逆序,每次划分只能得到一个比上一次划分少一个记录的子序列,(另一个子序列为空)。此时,必须经过n-1次递归调用才能把所有记录定位,而且第i趟划分需要经过n-i次比较才能找个才能找到第i个记录的位置,因此时间复杂度为 平均情况下,设轴值记录的关键码第k小(1≤k≤n),则有: 由上式可推出如下两式: 两式相减,然后两边同除以n(n+1)得
又因为f(n)单调递减,单调有界数列极限定理,所以f(n)有界
此数称为欧拉常数, 约为 0.57721566490153286060651209 所以 所以
|