快速排序-空间复杂度-为什么O(logN)不是O(N)?

时间:2019-06-12 23:31:34

标签: quicksort

因此在quicksort中,空间复杂度据说是O(log N),但这就是我的想法。由于logN是由堆栈调用产生的,因此始终可以选择导致O(N)调用而不是O(logN)调用的最差数据透视?不是O(N)吗?

1 个答案:

答案 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;
        }
    }
}