对于快速排序的正确实现,我似乎有点困惑。
如果我想找到quicksort的所有轴心值,那么在什么时候停止划分子数组?

QuickSort(A,p,r):
    if p < r:
        q = Partition(A,p,r)
        Quicksort(A,p,q-1)
        Quicksort(A,q+1,r)

Partition(A,p,r):
    x = A[r]
    i = p-1
    for j = p to r-1:
    if A[j] ≤ x:
        i = i + 1
        swap(A[i], A[j])
    swap(A[i+1], A[r])
    return i+1

意思是,如果我有一个数组:
A=[9,7,5,11,12,2,14,3,10,6]
当Quick Sort将其分解为组成部分时…
A=[2,5,3][12,7,14,9,10,11]
再往前走一步就到了混乱的地步。。。
A=[2,5][7,12,14,9,10,11]
左边的子阵停在这里吗?或者它(quicksort)最后调用quicksort,将5作为最终的轴值?
对我来说,我们继续下去,直到所有的子阵都是单一的项目-但我的一个同行一直告诉我,否则。

最佳答案

示例的轴心是:6, 3, 11, 10, 9, 12关于
左边的子阵停在这里吗?
最好检查源代码。当递归子数组变为[2, 5, 3]时,函数QuickSort将用p = 0r = 2调用我们继续:Partition(A,0,2)将返回q = 1,因此接下来的两个调用将是Quicksort(A,0,0)Quicksort(A,2,2)。因此,Quicksort(A,0,1)将永远不会被调用,因此您将永远没有机会检查子阵列-它已经被排序!

关于algorithm - 查找quickSort算法的所有关键值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46784076/

10-12 19:38