java – 为什么QuickSort使用O(log(n))额外的空间?

我已经实现了以下的快速排序算法。在线我读过它有一个空格要求O(log(n))。为什么会这样?我没有创建任何额外的数据结构。

是因为我的递归将在堆栈上使用一些额外的空间吗?如果是这种情况,是否可以通过不具有递归(而不是迭代)来减少内存来做到这一点?

private static void quickSort (int[] array, int left, int right) {
    int index = partition(array, left, right);

    //Sort left half
    if (left < index - 1)
        quickSort(array, left, index - 1);

    //Sort right half
    if (index < right)
        quickSort(array, index , right);
}

private static int partition (int array[], int left, int right) {
    int pivot = array[(left + right) / 2]; //Pick pivot point
    while (left <= right) {
        //Find element on left that should be on right
        while (array[left] < pivot)
            left++;

        //Find element on right that should be on left
        while (array[right] > pivot)
            right--;

        //Swap elements and move left and right indices
        if (left <= right) {
            int temp = array[left];
            array[left] = array[right];
            array[right] = temp;
            left++;
            right--;
        }
    }
    return left;
}
正确的是,额外的空间是log(n)堆栈帧。从Wikipedia article of Quicksort

There is a more complex version which uses an in-place partition
algorithm and can achieve the complete sort using O(log n) space (not
counting the input) on average (for the call stack).

此外,我认为使其迭代是不可能的,因为它不是tail recursive

最后,正如其他答案所指出的,O(log(n))对于几乎所有的实际应用非常非常小。每一个常数因素,如数据结构的开销,都会对内存使用产生更大的影响。

http://stackoverflow.com/questions/12573330/why-does-quicksort-use-ologn-extra-space

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 为什么QuickSort使用O(log(n))额外的空间?