对于快速排序的正确实现,我似乎有点困惑。
如果我想找到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 = 0
和r = 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/