[英]Quick sort : analysis of partitioning
我正在罗伯特·塞奇威克(Robert Sedgewick)的算法第四课程中学习快速排序。
我想知道快速排序代码的以下分区是长度为N的数组中的比较数。
private static int partition(Comparable[] a, int lo, int hi)
{
int i = lo, j = hi+1;
while (true)
{
while (less(a[++i], a[lo]))
if (i == hi) break;
while (less(a[lo], a[--j]))
if (j == lo) break;
if (i>= j) break;
exch(a, i, j);
}
exch(a, lo, j);
return j;
}
我想知道上述代码的T(n)。 ( 相比 )
在我看来,比较需要大约2N。
的原因是因为它占据N比较了i
到从左向右移动,并且用于j
向右移动,以分别在一个已排序阵列左诸如阵列(A,B,C,d,E,F,G, H)。
比较= less()
该分区函数的时间复杂度为T(n) = O(n)
天哪,这是我迭代i
错误。
在找到i
要停止的过程中,只需要1个比较即可。
因此,需要〜N个比较。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.