Quick Sort
快排的模板代码。
两个要点:
pivot 要选择的是值,而不是索引
三个 while 循环的条件都是
<=而不是<
Partition 执行完毕之后,最后 left 和 right 已经交错而过,此时 right 在左 left 在右
class Solution:
# @param {int[]} A an integer array
# @return nothing
def sortIntegers2(self, A):
# Write your code here
self.quickSort(A, 0, len(A) - 1)
def quickSort(self, A, start, end):
if start >= end:
return
left, right = start, end
# key point 1: pivot is the value, not the index
pivot = A[start + (end - start) // 2];
# key point 2: every time you compare left & right, it should be
# left <= right not left < right
while left <= right:
while left <= right and A[left] < pivot:
left += 1
while left <= right and A[right] > pivot:
right -= 1
if left <= right:
A[left], A[right] = A[right], A[left]
left += 1
right -= 1
self.quickSort(A, start, right)
self.quickSort(A, left, end)最后更新于
这有帮助吗?