分区方法

时间:2010-02-06 23:48:23

标签: methods data-partitioning

我试图准确理解这种方法的作用,它说它的假设 “继续交换最外部错位的对子”。我把它放到一个程序中 并尝试了不同的数组,但结果对我没有意义,这究竟做了什么

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

1 个答案:

答案 0 :(得分:1)

此伪代码实现的算法是quicksort sorting algorithm的分区阶段。它将排列数组,使小于或等于A[p]的所有值都在左侧,所有值都在右侧。它返回索引j,该索引是A[j]等于A[p]的左侧的最后一个索引。

如果您不熟悉quicksort,目的是使用此分区算法将数组拆分为“小”和“大”部分,并递归地对每个部分进行排序。由于小的数组已安排在数组中的大数据之前,因此数组会被排序。如果p被恰当地选中以使A[p]接近A中值的中间位置,则这是一种非常快速的排序方法。