作用
partitionpartition的作用是确定一个数字的最终位置。
模板
代码如下:
def partition(self, A, n, first, last):
while first <= last:
while first <= last and A[first] <= n: first += 1
while first <= last and A[last] > n: last -= 1
if first <= last: A[first], A[last] = A[last], A[first]
return last
这样得到的结果,小于等于nn的数字全都在左边,大于等于的位置全都在右边,得到的lastlast是小于等于nn的最右边位置,是大于nn的最左边位置。
应用
快排中的用到了这个算法。
代码如下:
class QuickSort:
def partition(self, A, first, last):
tmp = A[first]
firstIndex = first
while first <= last:
while first <= last and A[first] <= tmp: first += 1
while first <= last and A[last] > tmp: last -= 1
if first <= last: A[first], A[last] = A[last], A[first]
A[firstIndex], A[last] = A[last], A[firstIndex]
return last
def sort(self, A, first, last):
if first >= last: return
part = self.partition(A, first, last)
self.sort(A, first, part - 1)
self.sort(A, part + 1, last)
def quickSort(self, A, n):
# write code here
self.sort(A, 0, n - 1)
return A
注意,因为这段代码中的partitionpartition用的A[first]A[first],所以最后需要把A[first]A[first]的值交换到最右边的lastlast位置。