我试图准确理解这种方法的作用,它说它的假设 “继续交换最外部错位的对子”。我把它放到一个程序中 并尝试了不同的数组,但结果对我没有意义,这究竟做了什么
partition(A, p)
A: array of size n, p: integer s.t. 0 <= p < n
1. swap(A[0],A[p])
2. i <- 1, j <- n − 1
3. while i < j do
4. while A[i] <= A[0] and i < n do
5. i <- i + 1
6. while A[j] > A[0] and j > 0 do
7. j <- j − 1
8. if i < j then
9. swap(A[i], A[j])
10. swap(A[0], A[j])
11. return j
答案 0 :(得分:1)
此伪代码实现的算法是quicksort sorting algorithm的分区阶段。它将排列数组,使小于或等于A[p]
的所有值都在左侧,所有值都在右侧。它返回索引j
,该索引是A[j]
等于A[p]
的左侧的最后一个索引。
如果您不熟悉quicksort,目的是使用此分区算法将数组拆分为“小”和“大”部分,并递归地对每个部分进行排序。由于小的数组已安排在数组中的大数据之前,因此数组会被排序。如果p
被恰当地选中以使A[p]
接近A
中值的中间位置,则这是一种非常快速的排序方法。