因此在quicksort中,空间复杂度据说是O(log N),但这就是我的想法。由于logN是由堆栈调用产生的,因此始终可以选择导致O(N)调用而不是O(logN)调用的最差数据透视?不是O(N)吗?
答案 0 :(得分:0)
此Java示例仅通过对较小的部分使用递归,然后循环返回以处理较大的部分,将堆栈空间限制为O(log(n))。最坏的情况下时间复杂度仍然是O(n ^ 2)。
public static void qsort(long[] a, int lo, int hi)
{
while(lo < hi){
int md = lo+(hi-lo)/2;
int ll = lo-1;
int hh = hi+1;
long p = a[md];
long t;
while(true){
while(a[++ll] < p);
while(a[--hh] > p);
if(ll >= hh)
break;
t = a[ll];
a[ll] = a[hh];
a[hh] = t;
}
ll = hh++;
if((ll - lo) <= (hi - hh)){
qsort(a, lo, ll);
lo = hh;
} else {
qsort(a, hh, hi);
hi = ll;
}
}
}